题目描述:
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
解题思路:
在明确了字符的排列顺序后,题目要求是按照行的排列顺序输出,所以想到使用字符串数组来保存每一行的字符串。
class Solution {
public:
string convert(string s, int numRows) {
int len=s.size();
if(numRows==1)return s;
int period=2*numRows-2;
vector<string>tmp(numRows);
string output;
for(int i=0;i<len;i++){
int ans=i%period;
if(ans<numRows){
tmp[ans]+=s[i];
}
else if(ans>=numRows){
tmp[period-ans]+=s[i];
}
}
for(int i=0;i<numRows;i++){
output+=tmp[i];
}
return output;
}
};
定义字符串数组tmp,其大小为numRows,用来存储每一行的字符串。在Z字形遍历时可以看到,2n-2是一个周期,即在一个周期内完成从0到numRows-1,再到0的排序。
【求余%找个还挺有用】