标签:stringbuilder string java leetcode 折线行列输出
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)Hide Tags: String
解题思路:
因为行数为变量,因此我们需要找到每一行的规律。例如:当行数numRows=4时,则ZigZag应该按下列方式排列
不难看出,满数为4的列之间的步数为4,实际上,此时步的规律为:step=2*numRows-2 =2*4-2=6
代码如下:
public static String convert(String s,int numRows) { //当字符串的长度为0或行数为1时,直接返回s if (s.length()==0||numRows==1) { return s; } //new一个StringBuilder,用于 字符串的拼凑 StringBuilder sb=new StringBuilder(); int step=2*numRows-2; for (int i = 0; i < numRows; i++) { //第一行与最后一行,中间的步数为:step=2*numRows-2 if (i==0||i==numRows-1) { for (int j = i; j < s.length(); j=j+step) { sb.append(s.charAt(j)); } } else { int j=i; //设置一个step1与step2交替变换的标识 boolean flag=true; int step1=2*(numRows-1-i); int step2=step-step1; while (j<s.length()) { sb.append(s.charAt(j)); if (flag) { j=j+step1; } else { j=j+step2; } flag=!flag; } } } //将StringBuilder转换成String类型 return sb.toString(); }
leetcode——6 ZigZag Conversion(折线行列输出问题)
标签:stringbuilder string java leetcode 折线行列输出
原文地址:http://blog.csdn.net/zzc8265020/article/details/46550013