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"
.
Subscribe to see which companies asked this question.
直接弄个string数组,按z字型往里填,最后顺序读取,简单粗暴
class Solution {
public:
string convert(string s, int numRows) {
if(numRows <= 1) return s; //单行直接返回
string *str = new string[numRows];
int row = 0, num = 2*numRows - 2; //除num的余数用于判断行数
for(int i = 0;i<s.length();i++){
str[row].push_back(s[i]);
int j = i%num;
if(j < numRows-1) row++; //余数小于行数则++,大于则--
class Solution {
public:
string convert(string s, int numRows) {
if(numRows <= 1) return s; //单行直接返回
string *str = new string[numRows];
int row = 0, num = 2*numRows - 2; //除num的余数用于判断行数
for(int i = 0;i<s.length();i++){
str[row].push_back(s[i]);
int j = i%num;
if(j < numRows-1) row++; //余数小于行数则++,大于则--
else row--;
}
s.clear(); //清空原string
for(int j = 0;j<numRows;j++){
s.append(str[j]); //追加非覆盖
//string &append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾
}
return s;
}
};