Week5: ZigZag Conversion
Difficulty:Medium
1.Question
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
2.Algorithm
1.首先根据输入的numRows分为numRows个字符串——
string row[numRows]
,该数组每i个元素代表着第i行的数据2.接下来判断s中的每个字符属于哪一行,判断的依据如下:
divisor = 2 * (numRows - 1)
temp = 字符所在的索引 / divisor
若temp <= numRows,则temp即为字符所属行
若temp >= numRows,则divisor-numRows即为字符所属行
3.将判断好的字符加入对应的row数组中
4.最后按顺序将四个字符串加起来便为输出的结果
3.Solution
class Solution {
public:
string convert(string s, int numRows) {
string row[numRows];
string result = "";
for (int i = 0; i < numRows; i++) {
row[i] = "";
}
int divisor = 1;
if (numRows > 1) {
divisor = 2 * (numRows-1);
}
for (int i = 0; i < s.length(); i++) {
int temp = i % divisor;
if(temp > numRows - 1) {
temp = divisor - temp;
}
row[temp] += s[i];
}
for(int i = 0; i < numRows; i++) {
result += row[i];
}
return result;
}
};