首页 > 代码库 > 【LeetCode】ZigZag Conversion

【LeetCode】ZigZag Conversion

ZigZag Conversion

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

 

创建nRows个数组,将s按照0,1,2,...,nRows-2,nRows-1,nRows-2,...,2,1,0的顺序,

将s中每个字符装入数组。

再依次输出0~nRows-1个数组。

class Solution {public:    string convert(string s, int nRows) {        if(s == "")            return "";        if(nRows == 1)            return s;                vector<vector<char> > v(nRows);        int tag = 1;    //1-increase; -1 decrease        int ind = -1;        for(int i = 0; i < s.size(); i ++)        {            if(tag == 1)                ind ++;            else                ind --;            v[ind].push_back(s[i]);                        if(ind == 0)                tag = 1;            else if(ind == nRows-1) //nRows != 1                tag = -1;        }        string ret;        for(int i = 0; i < nRows; i ++)        {            for(int j = 0; j < v[i].size(); j ++)                ret += v[i][j];        }        return ret;    }};

技术分享

【LeetCode】ZigZag Conversion