您的位置:首页 > 其它

leetcode 6 ZigZag Conversion

2016-04-06 23:00 288 查看

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode