思路
寻找每个位置处的序号规律,在O(n)时间复杂度内可以恢复到原来的字符串。
p.s. 基本上是一次做出来的,優秀ですよ。
public static String convert(String s, int numRows) {
String ret = "";
int n = s.length();
if (n != 0)
{
if (numRows == 1)
return s;
int m = 2 * numRows - 2;
int t = 0; // 定义乘数t,乘数和行数相同
while (t < n && t < numRows)
{
int p = t; // 每一行的第一个字母位置和行数相同和乘数相同
ret += s.charAt(p);
while (true)
{
if ((m - 2*t) != 0) // 最后一行的情况
{
p += (m - 2*t);
if (p >= n)
break;
ret += s.charAt(p);
}
if (2*t != 0) // 第一行的情况
{
p += 2*t;
if (p >= n)
break;
ret += s.charAt(p);
}
}
t++;
}
}
return ret;
}