原题描述
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z字形排列,然后输出。(此处需要示例解释一下)
示例 1
代码语言:javascript复制输入:"LEETCODEISHIRING" ,行数为 3 时
输出:"LCIRETOESIIGEDHN"
解释:
L C I R
E T O E S I I G
E D H N
示例 2
代码语言:javascript复制输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
L D R
E O E I I
E C I H N
T S G
你能看出Z字形了吗?那么现在请你实现这个转换后输出的函数吧!
原题链接:https://leetcode-cn.com/problems/zigzag-conversion
思路解析
可别被题目吓到了,这题的规律还挺容易找到的,我认为是一道简单题,只是你需要踏实下来在纸上打打草稿,并且认真的处理边界情况。我把按照Z字形放置时,所有行的index总结了出来,我们只需要开启row层循环,依次按照下面的index取数据即可。
复杂度分析
- 时间复杂度:
- 空间复杂度:
C 参考代码
代码语言:javascript复制
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
string res;
int stride = 2 * (numRows - 1);
for (int i = 0; i < numRows; i) {
for (int k = 0; i k < s.size(); k = stride) {
res = s[i k];
if (i > 0 && i < numRows - 1 && k stride - i < s.size()) {
res = s[k stride - i];
}
}
}
return res;
}
};