Leetcode 6.ZigZag Conversion

简介: 如上所示,这就是26个小写字母表的5行曲折变换。 其中在做这道题的时候把不需要我们构造出这样五行字符,然后拼接。其实你把字母换成1-n的数字,很容易找到每个位置的字母在原字符串中的位置。

题目名称『曲折变换』,但给的样例只有三行,看不出到底怎么样曲折变化,所以这里我再补充一个样例,大家肯定一下就懂了。


a        i         q        y
 b      h j      p  r      x z
 c    g   k    o    s    w
 d  f     l  n      t  v
 e        m         u

 如上所示,这就是26个小写字母表的5行曲折变换。 其中在做这道题的时候把不需要我们构造出这样五行字符,然后拼接。其实你把字母换成1-n的数字,很容易找到每个位置的字母在原字符串中的位置。

1         9        17        25
 2      8 10     16 18     24 26
 3    7   11   15   19   23
 4  6     12 14     20 22
 5        13        21

 多画几个,可以尝试下3行6行,其实你就会发现,每行每两两之间的间隔是有规律的,注意看,除了第一行和最后一行,中间行的间隔有两种,但都是成对出现了。其实我们可以把第一行和最后一行的数字间隔也看做一对,只不过另一个是0罢了。

第i行的间隔对[2*(numRows-1)-i*2, 0+i*2] (0<=i<numRows)


public class Solution {
    public String convert(String s, int numRows) {
        if (1 == numRows) 
            return s;
        int len = s.length();
        //频繁变动的字符串建议用StringBuffer,String变动的性能成本比较高
        StringBuffer t = new StringBuffer();
        int[] a = {2*(numRows-1), 0};
        for (int i = 0; i < numRows; i++) {
            int pos = i;
            int index = 0;
            while (pos < len) {
                if (0 != a[index]) {//这里其实是特殊处理第一行和最后一行,因为这俩行只用到了非0间隔
                    t.append(s.charAt(pos));
                    pos += a[index];
                }
                index = index^1; //通过异或来实现index值0和1之间的相互转换
            }
            a[0] -= 2;
            a[1] += 2;
        }
        return new String(t);
    }
}
目录
相关文章
|
索引
Leetcode-Medium 6. ZigZag Conversion
Leetcode-Medium 6. ZigZag Conversion
70 0
Leetcode-Medium 6. ZigZag Conversion
LeetCode---Problem6 ZigZag Conversion
ZigZag问题思路。代码整洁并不一定执行速度就好~
762 0
|
机器学习/深度学习 Perl
|
Perl
[LeetCode]--6. 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
1177 0
LeetCode - 6. ZigZag Conversion
6. ZigZag Conversion  Problem's Link  ---------------------------------------------------------------------------- Mean:  给你一个字符串,让你将其按照倒‘之’字型排列,然后输出排列后的顺序.
879 0
|
索引 Java Perl
LeetCode 6 ZigZag Conversion(Z型转换)(String)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/48634663 ...
784 0
|
C++
[LeetCode] Zigzag Conversion
The key challenge to this problem is to make the code clean. This post has shared a nice example, which is rewritten below in C++.
881 0
|
Python Go Perl
leetcode 6 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 ...
822 0

热门文章

最新文章