Leetcode Z字形变换
java 代码实现
class Solution {
public String convert(String s, int numRows) {
//特殊情况处理
if(numRows == 1 || s.length() <= numRows) return s;
//定义cycleLen
int cycleLen = 2 * numRows - 2;
//利用 index 下标来跳跃遍历
int index = 0; //记录字符串s的字符下标
int add = 0; //除了第一行和最后一行以外其他行内两个字符之间的下标间距
StringBuilder ret = new StringBuilder();
for(int i = 0; i < numRows; i++) { //逐行处理
index = i;
add = i * 2;
while(index < s.length()) {
ret.append(s.charAt(index)); //当前行的第一个字符,因为最开始第一列是竖着排列
//计算当前行下一个字符的下标间距
add = cycleLen - add;
//第 0 行和最后一行使用 step 间距, 其余使用 add 间距
index += (i == 0 || i == numRows - 1)? cycleLen : add;
}
}
return ret.toString();
}
}