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;
}
};