[leetcode] ZigZag Conversion

来源:互联网 发布:手机 淘宝 降价提醒 编辑:程序博客网 时间:2024/06/01 19:28

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

参考链接:http://blog.csdn.net/cshaxu/article/details/12507201

代码:

class Solution {public:    string convert(string s, int nRows) {        if(s.size()==0 || nRows<=0) return "";        if(nRows==1) 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-i-1)]);                    }                }            }        }        return res;    }};



0 0
原创粉丝点击