LeetCode - ZigZag Conversion
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode - ZigZag Conversion相关的知识,希望对你有一定的参考价值。
这个题的要求是给你一个字符串,和一个行数,例如(s = "mysisteristhemostlovelygirl" , row = 4),每一行一个字符串,但是s却得按照zigzag的方式重排序到这4行的字符串里,什么意思呢? 看例子大概就懂了:
m e e o i
y t r h m l v g r
s s i t o t e y l
i s s l
第一列开始往下走,走到第四行就往上走(第二列),走回第一行就重新往下走,如此类推,最后的输出就是每一行的叠加,也就是:
"meeoiytrhmlvgrssitoteylissl"
思路其实很简单,就是用一个index来表示走到哪一行,用一个flag来表示往下还是往上走,当index>4和index < 0的时候,改变flag就可以了。代码如下:
public class Solution { public String convert(String s, int numRows) { if (numRows == 1) return s; String[] stringArray = new String[numRows]; //初始化字符串。 for (int i = 0; i < numRows; i++) { stringArray[i] = ""; } //index指向哪一行需要添加字母。 int index = 0; //flag==1代表往下走(初始),flag==0代表往下走。 int flag = 1; for (int i = 0; i < s.length(); i++) { if (flag == 1) { stringArray[index++] += s.charAt(i); //当index越界时 if (index == numRows) { //-2是因为边界在index-1的时候已经写过一遍了 index = index - 2; flag = 0; } } else { stringArray[index--] += s.charAt(i); //与上面同理 if (index < 0) { index = index + 2; flag = 1; } } } StringBuilder sb = new StringBuilder(stringArray[0]); //把每一行加起来,选择用StringBuilder而不用String是因为StringBuilder要快一些 //为什么?读者可以查阅相关资料就能够了解string往后面添加字符串是一个什么样的机制。 for (int i = 1; i < numRows; i++) { sb.append(stringArray[i]); } return sb.toString(); } }
以上是关于LeetCode - ZigZag Conversion的主要内容,如果未能解决你的问题,请参考以下文章
#Leetcode# 6. ZigZag Conversion
学习(Swift)Leetcode 6. ZigZag Conversion