首页 > 其他 > 详细

LeetCode问题6

时间:2017-09-25 00:32:27      阅读:285      评论:0      收藏:0      [点我收藏+]

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

这个问题到手想法就是找规律,把相应位置的字符依次移入即可。

规律如下:当zigzag的行数为n时,第i行依次增加2*(n-i)和2*(i-1)个字符,

例如当n=9时,取字符串的第几个值规律如下:

技术分享

竖线左侧为字符串标号,右侧为增加值的规律2*(n-i)和2*(i-1)。

据此写代码:

class Solution {
    public String convert(String s, int numRows) 
    {
        if((numRows==1)||(s.length()<=numRows))
            return s;
        StringBuilder res=new StringBuilder();
        int[][] a=new int[numRows][2];
        int index=0,length=s.length(),j=0;
        boolean stop=true;
        System.out.println(length);
        for (int i=0;i<numRows;i++)
        {
            a[i][0]=(numRows-1-i)*2;
            a[i][1]=i*2;
        }
        for(int i=0;i<numRows;i++)
        {
            index=i;
            System.out.println(index);
            res.append(s.charAt(index));
            j=0;
            stop=true;
            while(stop)
            {
                if(a[i][j%2]!=0)
                {
                    index+=a[i][j%2];
                    if(index<length)
                    {
                        System.out.println(index);
                        res.append(s.charAt(index));
                    }
                    else
                        stop=false;
                }
                j++;
            }
        }
        return res.toString();
    }
}

要点:

1、构建两个数组表示增加值;

2、用StringBuilder字符串编辑;

3、注意原字符串的长度,停止循环;

4、特殊情况:空字符串,字符串的长度比zigzag的长度要小。

我自我感觉时间复杂度没有那么夸张,应该在O(n)上,毕竟每个值都是直接从对应的位置取过来的。但是网站上显示很差劲。。。。

看下Solution后再更新。

技术分享

LeetCode问题6

原文:http://www.cnblogs.com/Einsler/p/7589463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!