leetcode6. Z 字形变换

举报
兔老大 发表于 2021/04/24 01:56:58 2021/04/24
【摘要】 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L   C   I   R E T O E S I I G E   D   H   N 之后,你的输出需要从左往右逐行读取,产生出一个新...

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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
E   O E   I I
E C   I H   N
T     S     G

思路:随着字符串元素的顺序,它们的行号依次为:0,1,2,3,2,1,0,1,2,3..........规律递增或递减。我们用字符串数组记录答案,第i个字符串代表第i行,最后加起来即可。


  
  1. class Solution {
  2. public String convert(String s, int numRows) {
  3. if (numRows == 1) return s;
  4. List<StringBuilder> rows = new ArrayList<>();//答案数组
  5. for (int i = 0; i < Math.min(numRows, s.length()); i++)
  6. rows.add(new StringBuilder());
  7. int curRow = 0;
  8. boolean goingDown = false;
  9. for (char c : s.toCharArray()) {
  10. rows.get(curRow).append(c);
  11. //到边界就换方向
  12. if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
  13. if(goingDown)curRow++;
  14. else curRow--;
  15. }
  16. StringBuilder ret = new StringBuilder();
  17. for (StringBuilder row : rows) ret.append(row);
  18. return ret.toString();
  19. }
  20. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/104367622

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。