两个点:将原字符串转化为z形,考虑位置?开数组记录位置?;排列好之后,如何按行读出字符串
实际不用考虑形式上的转换,找规律:按照等差数列的形式,直接列出答案
(这种奇怪题,先考虑找规律)
class Solution {
public:
string convert(string s, int n) {//numRows为n
string res;
if(n==1) return s;// 如果只有一行,则直接返回原字符串
for(int i = 0; i<n; i++){//从第一行开始,到最后一行
if(i==0 || i==n-1){//第一行或第n行,首项为i的等差数列
for(int j = i; j<s.size(); j += 2*n-2)
res += s[j];//完善结果:字符串可直接添加
}else{//中间行:可划分为两个数列
for(int j = i, k=2*n-2-i; j<s.size()||k<s.size(); j+=2*n-2, k+=2*n-2){
if(j < s.size()) res += s[j];// 添加第一个字符
if(k < s.size()) res += s[k];// 添加第二个字符
}
}
}
return res;//转换后的字符串
}
};