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 RAnd 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"
.--------------------------------
Solution #1 use a vector<string>
class Solution { public: string convert(string s, int nRows) { // Start typing your C/C++ solution below // DO NOT write int main() function if (nRows == 1) { return s; } vector<string> ret(nRows); for (int i=0;i<s.length();i++) { int row = i%(2*nRows - 2); if (row >= nRows) { row = 2*nRows - row-2; } ret[row] += s[i]; } string str = ""; for (int i=0;i<nRows;i++) { str += ret[i]; } return str; } };Solution #2
class Solution { public: string convert(string s, int numRows) { if (numRows == 1) return s; string rt = ""; int zigSize = numRows * 2 - 2; for (int row = 0; row < numRows; row++) { for (int i = row; i < s.length(); i += zigSize) { rt += s[i]; if (row != 0 && row != numRows - 1) { int mid = i + (numRows - (i % zigSize) - 1) * 2; if (mid < s.length()) { rt += s[mid]; } } } } return rt; } };
No comments:
Post a Comment