将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
方法:按行排序
这种方法就是准备大于numRows个容器,这里用的是string数组,感觉用+=还挺方便,然后把一个一个字符丢到自己所在行的容器里,容器的下标就不断在0和numRows之间反弹。
class Solution {
public:
string convert(string s, int numRows) {
string a[1000];
if (numRows==1) return s;
int i=0,j=0,op=0; //0+1-
while(s[i]){
a[j]+=s[i];
i++;
if (op==0 && j<numRows-1) j++;
else if(op==1 && j>0)j--;
if(j==numRows-1 || j==0) op=(op+1)%2;
}
string ans="";
for (i=0;i<numRows;i++){
ans+=a[i];
}
return ans;
}
};
执行用时 :20 ms, 在所有 cpp 提交中击败了54.06%的用户
内存消耗 :10.3 MB, 在所有 cpp 提交中击败了87.09%的用户