//列表示每一个完整列 中间间隔表示非完整列
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1 || numRows>= s.size())
return s;
string ans;
//middle表示中间间隔 排除一二行所以减2
int middle = numRows - 2,length = s.length(),flag = 0;
//count表示每一行的添加次数,余数不为0要多添加一次
int count = length/(middle+numRows), remainder = length % (numRows + middle);
if (remainder != 0)
count++;
for (int i = 0; i < numRows; i++) {
//余数不为0,并且i<余数则要多添加一次
if (remainder != 0 && i > remainder - 1 && flag == 0) {
count = count - 1;
flag = 1;
}
for (int j = 0,inter = i; j < count; j++) {
if (i == 0 || i == numRows - 1) {
ans.push_back(s[inter]);
inter += middle + numRows;
}
else {//添加当前行的列和中间的数
ans.push_back(s[inter]);
inter += numRows - i + middle - i;
if (inter < length)//防止越界添加的情况
ans.push_back(s[inter]);
inter += 2 * i;
}
}
}
return ans;
}
};
Leetcode 6. Z 字形变换
最新推荐文章于 2024-09-08 12:20:56 发布