[LeetCode]ZigZag Conversion

原创 2015年07月08日 17:55:16

虽然是easy的模式,但是还是写了好久。。
0 P H
1 A G I
i B F J
i+1 C E K
n-1 D L

直接以字符的下标来处理比较简单
关键是计算间隔
H 和P以及L和D之间的间隔是2(n-1)

F和B的间隔是2(n-1-i)
J和B的间隔也是2(n-1)或者是2(n-1-i)+2*i

循环的出口时下标>=len

class Solution {
public:
    string convert(string s, int numRows) {
        int len = s.size();
        string out;
        int idx;
        if(len ==1||numRows==1) return s;
        for(int i = 0; i != numRows;++i){
            idx = i;
            if(idx==0||idx == numRows-1){
                while(idx<len) {out.append(1,s[idx]); idx = idx + 2*(numRows -1);}
            }
            else{
                while(idx<len){
                    out.append(1,s[idx]);
                    idx = idx + 2*(numRows-1-i); 
                    if(idx>=len) break;
                    else{
                        out.append(1,s[idx]);
                        idx = idx + 2*i;
                    }

                }
            }

        }

        return out;


    }
};

有个神奇的代码
使用string数组或者vector大小为numRows,在字符下标i==0时,row向下生长,当字符下标j==numRows时,向上生长。

string convert(string s, int nRows) {

    if (nRows <= 1)
        return s;

    const int len = (int)s.length();
    string *str = new string[nRows];

    int row = 0, step = 1;
    for (int i = 0; i < len; ++i)
    {
        str[row].push_back(s[i]);

        if (row == 0)
            step = 1;
        else if (row == nRows - 1)
            step = -1;

        row += step;
    }

    s.clear();
    for (int j = 0; j < nRows; ++j)
    {
        s.append(str[j]);
    }

    delete[] str;
    return s;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Leetcode_6_ZigZag Conversion

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41408021 看完这篇文章,你可能会学到到知识如下: ...
  • pistolove
  • pistolove
  • 2014年11月23日 09:45
  • 2579

[Leetcode]6. ZigZag Conversion @python

题目The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (y...
  • qian2729
  • qian2729
  • 2016年01月13日 00:32
  • 715

LeetCode-6. ZigZag Conversion (JAVA)(之字形转换)

LeetCode-6. ZigZag Conversion (JAVA)(之字形转换)
  • mine_song
  • mine_song
  • 2017年04月17日 09:41
  • 210

【LeetCode】ZigZag Conversion 解题报告

【题目】 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like th...
  • ljiabin
  • ljiabin
  • 2014年10月26日 16:49
  • 22479

[LeetCode] 006. ZigZag Conversion (Easy) (C++/Java/Python)

[LeetCode] 006. ZigZag Conversion (Easy) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年02月28日 00:13
  • 2369

leetcode 6 ZigZag Conversion C++

这道题最大的难点在理解题意。。。 它是一个折线图样子的。 string convert(string s, int numRows) { string result = ""; ...
  • a2331046
  • a2331046
  • 2016年06月28日 10:52
  • 189

[Java]leetcode6 ZigZag Conversion

[Java]leetcode ZigZag Conversion
  • fumier
  • fumier
  • 2015年04月12日 11:17
  • 642

【python】【leetcode】【算法题目6—ZigZag Conversion】

一、题目描述 题目原文:   The string "PAYPALISHIRING" is written in a zigzag pattern on a given number...
  • u014615155
  • u014615155
  • 2016年11月26日 15:44
  • 409

6. ZigZag Conversion Leetcode Python

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you...
  • hyperbolechi
  • hyperbolechi
  • 2015年01月28日 02:21
  • 1002

LeetCode 6 ZigZag Conversion (C,C++,Java,Python)

Problem: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l...
  • runningtortoises
  • runningtortoises
  • 2015年05月06日 22:55
  • 1075
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode]ZigZag Conversion
举报原因:
原因补充:

(最多只允许输入30个字)