🌕 6. Z 字形变换
2022年6月20日
- algorithm
🌕 6. Z 字形变换
难度: 🌕
问题描述
解法
class Solution {
public String convert(String s, int numRows) {
// 思路:
// 画图,找规律
// 步长 step = numRows + (numRows - 2) == 2n - 2 为一组
// 第 0 行: 0 step 2step ...
// 第 1 行: 1 step - 1 step + 1 2step - 1 2step + 1 ...
// 第 n - 2 行: n - 2 step - (n - 2) step + (n - 2) ...
// 第 n - 1 行: n - 1 step + (n - 1) ...
int len = s.length();
int step = numRows + numRows - 2;
// 特殊情况特判
if(numRows == 1) {
return s;
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < numRows; i ++) {
for(int j = 0; j < len + i; j = j + step) {
if(i != 0 && i != numRows - 1) {
// 需要加上前面那条对角线元素
if(j - i > 0) {
sb.append(s.charAt(j - i));
}
}
if(j + i < len) {
sb.append(s.charAt(j + i));
}
}
}
return sb.toString();
}
}