第六题:(找规律)自己写的
1.边界情况:
numRows为1,或者s.size() < numRows。
2.思路:
找规律,第一行和最后一行是一个规律,其余是另外一个规律。
把z拆分为三部分第一部分长度为numRows,第二部分长度为numRows-2
显然第一行和最后一行只需要 每次加一个第一部分和第二部分(即numRows + numRows - 2)
其余行数则有两种情况一种是落在第一部分一种是落在第二部分
//找规律小学数学实在不好用言语表达 嘴笨
算法代码
class Solution {
public:
string convert(string s, int numRows) {
int n = s.size();
if (n <= numRows || numRows == 1)
return s;
string str(s.size(),0);
int j = 0,k = 0;
int bite = 0;
for (int i = 0; i < numRows; i++){
j = 0, k = 0;
if (i == 0 || i == numRows - 1){
int temp = i + j*(2 * numRows - 2);
while (temp < n){
str[bite] = s[temp];
bite++;
j++;
temp = i + j*(2 * numRows - 2);
}
}
else{
j = 0, k = 0;
bool jet = true;
int temp = i + j*(2*numRows - 2 * i - 2) + k*(2 * i);
while (temp < n){
str[bite] = s[temp];
bite++;
if (jet){
j++;
jet = false;
}
else{
k++;
jet = true;
}
temp = i + j*(2 * numRows - 2 * i - 2) + k*(2 * i);
}
}
}
return str;
}
};
static const int _ = []() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();