ZigZag Conversion

来源:互联网 发布:中国木制品数据 编辑:程序博客网 时间:2024/06/04 23:36

题目: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".

思路:

本题的一个思路就是一行一行的判断,对于有多少行,计算出gap=2*n-1;每一行i=i+gap;直接可以输出。

但是要注意的一点就是在另外一边的一个数字的计算,当然首先需要判断不能超过n。

还有一点就是第一行和最后一行不需要判断。

代码:

class Solution {public:    string convert(string s, int numRows) {        int len=s.length();        if(numRows==1||len<=numRows){//还没有numRows大,直接从上往下读            return s;        }        string result;        int gap=2*numRows-2;        for(int i=0;i<numRows;i++){            for(int j=i;j<len;j=j+gap){                result.push_back(s[j]);                if(i>0&&i<numRows-1&&(j+gap-2*i)<len){                    result.push_back(s[j+gap-2*i]);                }                //除去第一行和最后一行,第二列之字形的数字            }        }                return result;    }};


0 0
原创粉丝点击