题目描述:(力扣)

废话后面说,直接贴代码

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题)相关推荐

  1. Leecode06. Z 字形变换——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  2. LeetCode刷题笔记第6题:Z字形变换

    LeetCode刷题笔记第6题:Z字形变换 想法: 要完成字符串根据给定的行数从上往下,从左到右完成Z字形排列.当只有一行时直接返回原字符串,当行数大于1时,先以行数构建一个行数数值个空字符串的列表, ...

  3. leetcode第六题Z字形变换心得记录

    算法学习之路-坚持走下去 Z字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行 ...

  4. leetcode题库:6. Z字形变换

    题目: /**题目:6. Z字形变换(题目地址:https://leetcode-cn.com/problems/zigzag-conversion/description/)  * 将字符串 &qu ...

  5. Java算法题:Z字形变换

    Java算法题:Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行 ...

  6. java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...

  7. LeetCode Algorithm 6. Z 字形变换

    6. Z 字形变换 Ideas 这题的思路其实只要想到了就很简单,首先创建一个numRows行的矩阵,每一行用来存Z字变换后每一行的字符,然后遍历字符串s,其实就是从上往下然后从下往上填充到每一行,所 ...

  8. [模拟|字符串] leetcode 6 Z字形变换

    [模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...

  9. Java实现 LeetCode 6 Z字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  10. LeetCode 6.z字形变换

    LeetCode 6.z字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时, ...

最新文章

  1. 【编译原理】求一个句型短语、直接短语、句柄(一看就懂~!骗小狗)
  2. 关于Django将数据映射到Html中的操作
  3. 重磅!阿里发布全新操作系统,这次要干翻 CentOS 了!
  4. 常用面试题(对应的知识点)
  5. T24412 Cup#182-3 洞穴之旅
  6. Java并发编程实战~不安全的单例
  7. Vue 与 Web Components
  8. Linux RTC驱动模型分析之rtc-sysfs.c
  9. 单核CPU破解后量子加密候选算法只需一小时
  10. 运营商开始悄悄火拼5G价格战,19元套餐开始涌现
  11. 6、Lctech Pi(F1C200S)4.3寸(480*272)16位RGB565LCD屏驱动适配(CherryPi,Mangopi,F1C100S)
  12. dom4j 学习 -- 封装dom4j工具类+如何使用dom4j解析
  13. 上位机软件开发流程是怎样的?上位机开发软件分享
  14. Confidence Propagation Cluster: 一个来自CVPR2022的目标检测涨点神器(CP-Cluster)
  15. Cloud Exchange已上线 Collis的公告
  16. 将访问控制更改为:共享级访问控制,并重启计算机使设置生效.,Internet应用模拟题...
  17. libfdk_aac解码AAC
  18. C++ iostream库源码
  19. LaTeX数学公式相关
  20. 233网校计算机二级百度云盘6,2014年计算机二级考试《 Access》机考操作题题库(6)...

热门文章

  1. 关于 SAP Spartacus Loader Meta Reducer 的用途 - loading 在 true 和 false之前切换的逻辑
  2. 什么是 Linux Foundation
  3. SAP Spartacus auto focus Directive响应模型变化的一些触发时机例子
  4. 使用Angular的http client发送请求,请求response总是被当成json类型处理
  5. SAP Spartacus split view里每个元素宽度的计算方式
  6. rxjs of操作符传入数组的单步执行
  7. SAP Spartacus HTTP请求url里的语言和货币参数是如何加上去的
  8. Angular里使用createEmbeddedView的单步调试
  9. 一个使用Java BlockingQueue实现的生产者和消费者
  10. 推荐一个提供全球新冠肺炎确诊,死亡和治愈人数的网站,提供csv下载