Z字形变换(LeetCode第6题)
题目描述:(力扣)
废话后面说,直接贴代码
class Solution {public:string convert(string s, int numRows) {if (numRows == 1)return s;string ans("");int down = 2 * numRows - 4, up = 2;//设置up、down的初值for (int i = 0; i < numRows; i++) {int k = i,flag = 1;//第一行和最后一行的循环if (i == 0 || i == numRows - 1) {while (k < s.size()) {ans+=s[k];k = k + 2*numRows-2;}continue;}//中间行(第一行和最后一行之间的行)的循环elsewhile (k < s.size()) {ans += s[k];flag++ % 2 == 1 ? k += down : k += up;//用flag判断每次循环读取需跳跃的值}down -= 2;up += 2;//每结束一次中间行的循环up和down要变一次}return ans;}
};
提交,代码效率:
(大神看到这可以慢走了(..) )
看不懂代码思路的同学,可以耐心再听我唠一唠(ノ゚▽゚)
仔细观察一下这个图案,我们能想到最快的办法就是先把“LDR”提出来,再依次把“EOEII”、“ECIHN”、“TSG”提取出来,将它们连起来就好了。难点在于怎么知道‘L’的下一个提取目标是‘D’呢。
(在这里,我把图案中每一个Z字形中间出现的列数标记为m,像上图,当n=4的时候,m=2。不难发现m和n之间的规律是m=n-2。)
**情况1:观察第一行下标变化 ( 当n=4时,L跳跃到D,下标需要增加6=n+m) 可以发现这种情况适用于第一行和最后一行。
**情况2:中间行下标变化(1<?<n)
n=4,下标跳跃序列:
2-> +4,+2,+4,+2
3-> +2,+4,+2,+4
n=5,下标跳跃序列:
2-> +6,+2,+6,+2
3-> +4,+4,+4,+4
4-> +2,+6,+2,+6
n=6,下标跳跃序列:
2-> +8,+2,+8,+2
3-> +6,+4,+6,+4
4-> +4,+6,+4,+6
5-> +2,+8,+2,+8
相信你们已经发现了一些啥了,没错,中间行的跳跃序列排在一块后,从列看下来一列递减(down)一列递增(up),所以我们只需要知道他们的初始值与m、n的关系就可以了。
int down = ( m + n) - 2, up = 2;//设置up、down的初值
每行的下标跳跃只要遵守当前设定好的up、down值,就可以将中间行的字符串顺利提取。这时候,我们只需要在提取第n行和第n+1行之间,将up、down做递增和递减:
down -= 2;up += 2;//每结束一次中间行的循环up和down要变一次
好了,这就是这周分享的全部内容啦
(我太懒了只挑了我觉得自己做的还挺好的这一题)
继续加油吧奥利给!
Z字形变换(LeetCode第6题)相关推荐
- Leecode06. Z 字形变换——Leecode大厂热题100道系列
我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...
- LeetCode刷题笔记第6题:Z字形变换
LeetCode刷题笔记第6题:Z字形变换 想法: 要完成字符串根据给定的行数从上往下,从左到右完成Z字形排列.当只有一行时直接返回原字符串,当行数大于1时,先以行数构建一个行数数值个空字符串的列表, ...
- leetcode第六题Z字形变换心得记录
算法学习之路-坚持走下去 Z字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行 ...
- leetcode题库:6. Z字形变换
题目: /**题目:6. Z字形变换(题目地址:https://leetcode-cn.com/problems/zigzag-conversion/description/) * 将字符串 &qu ...
- Java算法题:Z字形变换
Java算法题:Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行 ...
- java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...
- LeetCode Algorithm 6. Z 字形变换
6. Z 字形变换 Ideas 这题的思路其实只要想到了就很简单,首先创建一个numRows行的矩阵,每一行用来存Z字变换后每一行的字符,然后遍历字符串s,其实就是从上往下然后从下往上填充到每一行,所 ...
- [模拟|字符串] leetcode 6 Z字形变换
[模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- LeetCode 6.z字形变换
LeetCode 6.z字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时, ...
最新文章
- 【编译原理】求一个句型短语、直接短语、句柄(一看就懂~!骗小狗)
- 关于Django将数据映射到Html中的操作
- 重磅!阿里发布全新操作系统,这次要干翻 CentOS 了!
- 常用面试题(对应的知识点)
- T24412 Cup#182-3 洞穴之旅
- Java并发编程实战~不安全的单例
- Vue 与 Web Components
- Linux RTC驱动模型分析之rtc-sysfs.c
- 单核CPU破解后量子加密候选算法只需一小时
- 运营商开始悄悄火拼5G价格战,19元套餐开始涌现
- 6、Lctech Pi(F1C200S)4.3寸(480*272)16位RGB565LCD屏驱动适配(CherryPi,Mangopi,F1C100S)
- dom4j 学习 -- 封装dom4j工具类+如何使用dom4j解析
- 上位机软件开发流程是怎样的?上位机开发软件分享
- Confidence Propagation Cluster: 一个来自CVPR2022的目标检测涨点神器(CP-Cluster)
- Cloud Exchange已上线 Collis的公告
- 将访问控制更改为:共享级访问控制,并重启计算机使设置生效.,Internet应用模拟题...
- libfdk_aac解码AAC
- C++ iostream库源码
- LaTeX数学公式相关
- 233网校计算机二级百度云盘6,2014年计算机二级考试《 Access》机考操作题题库(6)...
热门文章
- 关于 SAP Spartacus Loader Meta Reducer 的用途 - loading 在 true 和 false之前切换的逻辑
- 什么是 Linux Foundation
- SAP Spartacus auto focus Directive响应模型变化的一些触发时机例子
- 使用Angular的http client发送请求,请求response总是被当成json类型处理
- SAP Spartacus split view里每个元素宽度的计算方式
- rxjs of操作符传入数组的单步执行
- SAP Spartacus HTTP请求url里的语言和货币参数是如何加上去的
- Angular里使用createEmbeddedView的单步调试
- 一个使用Java BlockingQueue实现的生产者和消费者
- 推荐一个提供全球新冠肺炎确诊,死亡和治愈人数的网站,提供csv下载