来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
找规律
思路:字符串下标如下图所示,第一行和最后一行看成一个等差数列,其余行看成两个等差数列交替出现,公差都为 2 * (numRows - 1)
class Solution {
public:
string convert(string s, int numRows) {
string ans;
if(numRows == 1) return s; // 特判
for(int i = 0; i < numRows; i++) {
if(i == 0 || i == numRows - 1) {
for(int j = i; j < s.length(); j += 2 * numRows - 2) ans += s[j];
}
else {
for(int j = i, k = 2 * numRows - 2 - i; j < s.length() || k < s.length(); j += 2 * numRows - 2, k += 2 * numRows - 2) {
if(j < s.length()) ans += s[j];
if(k < s.length()) ans += s[k];
}
}
}
return ans;
}
};