leetcode 6: Z字形变换

Posted 不想取名字所以就随便写了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 6: Z字形变换相关的知识,希望对你有一定的参考价值。

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y   I   R

之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

实现一个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"

示例 2:

输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:

P     I    N
A   L S  I G
Y A   H R
P     I

解析:首先将例子以下标的形式展现如下
0     6       12
1   5 7    11 13
2 4   8 10
3     9
这样一来就可以很容易看出每一行相邻两元素的间距
6 0
4 2
2 4
0 6
至此规律已经很明显了, 这里需要注意第一行跟最后一行中表面上看貌似所有元素间距就只有6, 实际上我们可以假设有一个隐藏元素, 其与前一元素间距0, 也就是同一元素, 这样规律才更清晰
 1 string convert(string s, int numRows) {
 2         if(numRows == 1)
 3             return s;
 4         char *res = new char[s.size()+1];
 5         res[s.size()] = ;
 6         int j = 0;
 7         int sp = (numRows << 1 ) - 2;
 8         for(int i = 0; i < numRows; ++i)
 9         {
10             int p = i;
11             bool flag = true;
12             while(p < s.size() && j < s.size())
13             {
14                 res[j++] = s[p];
15                 int csp = flag? sp - (i << 1) : (i << 1);
16                 if(0 == csp)
17                 {
18                     j--;
19                 }
20                 p += csp;
21                 flag = !flag;
22             }
23         }
24         return res;
25 }

 













以上是关于leetcode 6: Z字形变换的主要内容,如果未能解决你的问题,请参考以下文章

Z字形变换 leetcode 6

leetcode算法:6.Z 字形变换

leetcode 6: Z字形变换

LeetCode 6 Z 字形变换

LeetCode 6. Z 字形变换(中)

LeetCode 6. Z 字形变换(中)