题目描述
将字符串 “PAYPALISHIRING” 以Z字形排列成给定的行数:(下面这样的形状)
P A H N
A P L S I I G
Y I R
之后按逐行顺序依次排列:”PAHNAPLSIIGYIR”
实现一个将字符串进行指定行数的转换的函数:
string convert(string text, int nRows);
convert(“PAYPALISHIRING”, 3) 应当返回 “PAHNAPLSIIGYIR” 。
解题分析和解答
1.根据输入的字符串和行数,计算出最大的列数。
2.根据行数和列数据,创建一个一维数组;
3.计算字符串中每个字符在数组中的位置;
4.最后输出,一维数组中的有效字符;
public String convert2(String s, int nRows) {
char[] c = s.toCharArray();
int len = c.length;
StringBuffer[] sb = new StringBuffer[nRows]; //存储每一行的值
for (int i = 0; i < sb.length; i++) {
sb[i] = new StringBuffer();
}
int i = 0;
while (i < len) {
for (int idx = 0; idx < nRows && i < len; idx++) // vertically down
sb[idx].append(c[i++]);
for (int idx = nRows-2; idx >= 1 && i < len; idx--) // obliquely up
sb[idx].append(c[i++]);
}
for (int idx = 1; idx < sb.length; idx++)
sb[0].append(sb[idx]);
return sb[0].toString();
}