leetcode刷题六z字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows); 示例 1:输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN" 示例 2:输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释:L D R
开始没有思路,看完官方的思路和代码然后这样做的
char* convert(char* s, int numRows) {if (numRows == 1||numRows==0)return s;int n=strlen(s);if(n==0||n==1||n==2) return s;char *re = (char *)malloc((n + 1) * sizeof(char));int j, k = 0;for (int i = 0; i < numRows; i++) {j = i;while (j < n) {re[k++] = s[j];if (i != 0 && i != numRows - 1 && j + 2 * (numRows - 1 - i) < n)re[k++] = s[j + 2 * (numRows - 1 - i)];j += 2 * numRows - 2;}}re[n] = '\0';return re; }
但是这样算法的复杂度有点高,大概是0(numRows+n)吧,后来看了下评论,发现一个比较优化的解法
,也是逐行处理,但是算法的复杂度貌似缩小到了0(n),大概思路是先遍历0行,然后是i行,然后是剩下的
代码如下:
char* convert(char* s, int numRows) {//获取s长度if(numRows==1)return s;int len=strlen(s); if(len==1||len==2) return s;//定义循环变量char* ret=(char *)malloc(sizeof(char)*(len+1));int i,j=0,k=0;//判断不形成z字//定义指针变量for(i=0;i<len;i=k*(2*numRows-2)){ret[j++]=s[i];k++;}//判断满足那个条件for(i=1;i<len-1;i++){k=0;while(k*(2*numRows-2)+i<len){//按照索引添加ret[j++]=s[k*(numRows-2)+i];if((k+1)*(2*numRows-2)-i<len) ret[j++]=s[(k+1)*(2*numRows-2)-i];k++;}}k=0;for(i=numRows-1;i<len;i=k*(2*numRows-2)+numRows-1){ret[j++]=s[i];k++;}ret[j]='\0';return ret; }
转载于:https://www.cnblogs.com/kk328/p/10468261.html
leetcode刷题六z字形变换相关推荐
- leetcode刷题:z字形变换
题目: 图解思路 实现代码如下: class Solution { public:string convert(string s, int numRows) {if(numRows < 2) r ...
- LeetCode刷题笔记第6题:Z字形变换
LeetCode刷题笔记第6题:Z字形变换 想法: 要完成字符串根据给定的行数从上往下,从左到右完成Z字形排列.当只有一行时直接返回原字符串,当行数大于1时,先以行数构建一个行数数值个空字符串的列表, ...
- Java算法题:Z字形变换
Java算法题:Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行 ...
- LeedCode刷题笔记-Z字形变化
LeedCode刷题笔记-Z字形变化 题目描述 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRI ...
- leecode算法题之Z字形变换
题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排 ...
- 力扣(LeetCode)刷题,简单+中等题(第33期)
目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...
- leetcode第六题Z字形变换心得记录
算法学习之路-坚持走下去 Z字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行 ...
- java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...
- Z 字形变换 C++实现 java实现 leetcode系列(六)
Z 字形变换 java实现 C++实现 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...
最新文章
- 大道至简_阅读笔记02
- 005_Button按钮
- hive 简单操作搜狗实验室的词频文件
- 这场戏里,到底是谁脏了?
- 《MySQL——如何解决一主多从的读写分离的过期读问题》
- PHP学习——定界符格式引起的错误
- c语言数组如何把一串数字存入数组_C语言经典编程题(下)
- 假如有人炸了支付宝的存储服务器...
- 校招应聘产品经理,怎么准备?网易大佬来回答
- 拯救者linux无法正常关机,菜鸟求助。centos无法关机。请各位高手帮忙! - Linux论坛 - 51CTO技术论坛_中国领先的IT技术社区...
- python2.7环境变量的配置_Windows7下python2.7.6环境变量配置
- 2.4~5 x86计算机的组成
- linux中Chmod + X
- 配置MatConvNet
- 我的求学十年(00至10):从中学到大学,年少轻狂立大志
- Qt5.12.9 搜狗输入法不能使用,配置解决方案
- ROS智能车定位导航仿真(已实现)
- 如何在oracle官网下载ojdbc8,想不想在maven里直接下载ojdbc这个jar?
- python爬微信公众号视频_python爬虫公众号所有信息,并批量下载公众号视频
- css3扭蛋机,微信小程序扭蛋抽奖机css3动画实现详解.pdf
热门文章
- 计算机视觉哪个方向最火?来看这篇综述《中国图像工程:2020》
- C++/C--浮点型数据的二进制表示及其内存存储形式
- ubuntu 16.04下切换python版本小结
- Zdenek Kalal的TLD Tracker(牛啊,学习!)
- 相机标定(Camera calibration)
- 波兰表达式(前序表达式)的计算(栈)
- Struts2访问Servlet的三种方式
- Struts标签入门
- 【编撰】linux IPC 002 - 匿名管道PIPE和有名管道FIFO的概念和实例,以及应用比较
- 主机甲采用停等协议向主机乙_习题