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(折线行列输出问题)
原文:http://blog.csdn.net/zzc8265020/article/details/46550013