leetcode 6 ZigZag Conversion

来源:互联网 发布:石川智晶 知乎 编辑:程序博客网 时间:2024/06/05 15:13

problem

https://leetcode.com/problems/zigzag-conversion/

方法1 模拟 68ms

class Solution {public:    string convert(string s, int numRows) {        if (numRows == 1)            return s;        const int numCols = (s.size()/(numRows-2 + numRows) +1) * (numRows-2+1);        char m[numRows][numCols];        memset(m, 0, sizeof(m));        int dir = 0;        int row = 0;        int col = 0;        for (int i=0; i< s.size(); i++)        {            m[row][col] = s[i];            if (dir == 0)            {                row++;            }else{                row--;                col++;            }            if (row == numRows)            {                dir = 1;                row = numRows-2;                col ++;            }            if (row == -1)            {                dir = 0;                row = 1;                col --;            }        }        string res;        for (int i=0; i< numRows; i++)            for (int j=0; j< numCols; j++)                if (m[i][j] != 0)                    res.push_back(m[i][j]);        return res;    }};

注意行最大值的估计。

方法2 找规律 16ms

class Solution {public:    string convert(string s, int numRows) {        if (numRows == 1) return s;        string ret;        int inter = 2*numRows -2;        for (int i=0; i< numRows; i++)        {            int rinter = inter - 2*i;            if (rinter == 0)                rinter = inter;            for (int j=i; j<s.size();)            {                ret+= s[j];                j+= rinter;                rinter = inter -rinter;                if (rinter == 0)                    rinter = inter;            }        }        return ret;    }};
0 0
原创粉丝点击