ZigZag Conversion leetcode

来源:互联网 发布:matlab矩阵一行写不下 编辑:程序博客网 时间:2024/05/28 23:10

he 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   NA P L S I I GY   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 * nRows - 2

对于首行和末行之间的行,还会额外重复一次,重复的这一次距离本周期起始字符的距离是 2 * nRows - 2 - 2 * i


class Solution {public:    string convert(string s, int nRows) {        if(nRows<2)            return s;        string res;        for(int i=0;i<nRows;i++) {            for(int j=i;j<s.size();j += 2*(nRows-1)) {                res.push_back(s[j]);                if(i>0 && i<nRows-1) {                    if(j+2*(nRows-1-i) <s.size()) {                        res.push_back(s[j+2*(nRows-1-i)]);                    }                }            }        }        return res;    }};



0 0