Print By ZigZag(按锯齿状打印字符串)
题目描述:
这题来源于LeetCode,具体可以看这里.
解题思路:
第一种解题思路是找到打印的规律;主要有两个地方:
- 如果是第一行和最后一行,字符串的间隔和nrows有关;间隔为2(nrows - 1);
- 如果是中间行,其间隔是交替出现规律的;规律并且和所处的行数j有关;对于第j行而言;其下标间隔为2(nrows - 1 - j)和2j交替出现的。
代码如下:
|
|
解题思路2:
第二种解题思路我们可以将每行存入数组,我们遍历字符串,利用标记变量决定存入数组的方式,存入的方式根据锯齿的走向决定向上还是向下;向上走到第0行后就向下;向下走到nrows - 1后就向上走。
代码如下:
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
string res[numRows];
string result;
int step = 0;
int row = 0;
for (int i = 0; i < s.size(); i++){
res[row] = res[row] + s[i];//存入数组
if (row == 0) step = 1;
if (row == numRows - 1) step = -1; //决定走向
row = row + step;//数组下标随走向决定
}
for (int i = 0; i < numRows; i++){
result = result + res[i];//将数组连起来返回
}
return result;
}
};