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 s, int numRows);
Example 1:
Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR"
Example 2:
Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I
code
#include <iostream> #include <vector> using namespace std; class Solution { public: string convert(string s, int numRows) { if(numRows<=1) return s; string res(""); vector<string> tmp(numRows); int row=0,step=0; for(int i=0;i<s.length();++i) { tmp.at(row).push_back(s.at(i)); if(row==0) step=1; else if(row==numRows-1) step=-1; row+=step; } for(int i=0;i<numRows;++i) res.append(tmp.at(i)); return res; } }; int main() { Solution s; string str("PAYPALISHIRING"); string res(s.convert(str,3)); cout<<res<<endl; return 0; }