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


题目的意思是把字符串上下上下走之字形状,然后按行输出,比如包含数字0~22的字符串, 给定行数为5,走之字形如下:

image

现在要按行输出字符,即:0 8 16 1 7 9 15 17 2…….

如果把以上的数字字符看做是字符在原数组的下标, 给定行数为n = 5, 可以发现以下规律:

(1)第一行和最后一行下标间隔都是interval = n*2-2 = 8 ;                                                   本文地址

(2)中间行的间隔是周期性的,第i行的间隔是: interval–2*i,  2*i,  interval–2*i, 2*i, interval–2*i, 2*i, …

 

代码如下,时间复杂度为O(n),n是字符串的长度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class  Solution {
public :
     string convert(string s, int  nRows) {
         if (nRows == 1) return  s;
         int  len = s.size(), k = 0, interval = (nRows<<1)-2;
         string res(len, ' ' );
         for ( int  j = 0; j < len ; j += interval) //处理第一行
             res[k++] = s[j];
         for ( int  i = 1; i < nRows-1; i++) //处理中间行
         {
             int  inter = (i<<1);
             for ( int  j = i; j < len; j += inter)
             {
                 res[k++] = s[j];
                 inter = interval - inter;
             }
         }
         for ( int  j = nRows-1; j < len ; j += interval) //处理最后一行
             res[k++] = s[j];
         return  res;
     }
};

 






本文转自tenos博客园博客,原文链接:http://www.cnblogs.com/TenosDoIt/p/3738693.html,如需转载请自行联系原作者

目录
相关文章
Leetcode 6.ZigZag Conversion
如上所示,这就是26个小写字母表的5行曲折变换。 其中在做这道题的时候把不需要我们构造出这样五行字符,然后拼接。其实你把字母换成1-n的数字,很容易找到每个位置的字母在原字符串中的位置。
61 0
|
Python
LeetCode 103. BTree Zigzag Level Order Traversal
给定二叉树,返回其节点值的Z字形级别遍历。 (即,从左到右,然后从右到左进行下一级别并在之间交替)。
80 0
LeetCode 103. BTree Zigzag Level Order Traversal
|
索引
Leetcode-Medium 6. ZigZag Conversion
Leetcode-Medium 6. ZigZag Conversion
98 0
Leetcode-Medium 6. ZigZag Conversion
LeetCode---Problem6 ZigZag Conversion
ZigZag问题思路。代码整洁并不一定执行速度就好~
798 0
LeetCode - 6. ZigZag Conversion
6. ZigZag Conversion  Problem's Link  ---------------------------------------------------------------------------- Mean:  给你一个字符串,让你将其按照倒‘之’字型排列,然后输出排列后的顺序.
915 0
|
索引 Java Perl
LeetCode 6 ZigZag Conversion(Z型转换)(String)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/48634663 ...
820 0