[leetcode] 6. ZigZag Conversion 解题报告

题目链接:https://leetcode.com/problems/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   N
A P L S I I G
Y   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" .

Subscribe to see which companies asked this question


思路:看了半天才把题目看懂,原来就是走个之字形。举个栗子:abcdefghijklmn 4

a        g        m

b     f  h    l   n

c  e    i  k

d        j

然后我们要给出的答案就是agmbfhinceikdj,横着读。

思路就是有几行就申请几个字符串,然后一个字符串把一行的字符收集起来,最后再加在一起。关于之字形遍历我们可以设置一个递增标记flag,可以为1和-1,代表下一个是增加还是减小。

今天最后一题,早上五点了,该睡觉了,还有5题就把easy题刷完了,马上就120了,马上假期就结束了,开学之前看能不能到150。晚安了!也可以说早安了!奋斗再见

代码如下:

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows == 1) return s;
        vector<string> vec(numRows);
        int flag = 1, i = 0, index = 0;
        while(i < s.size())
        {
            vec[index] += s[i];
            if(index == 0) flag = 1;//如果index为1,则下次应该+1
            else if(index == numRows-1) flag = -1;//如果index到达最大,则换个方向
            index += flag;
            i++;
        }
        string result;
        for(int i = 0; i< numRows; i++)//最后加起来
            result += vec[i];
        return result;
    }
};


你可能感兴趣的:(LeetCode,算法,design)