【LeetCode】ZigZag Conversion

Describe:

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)

字符串”PAYPALISHIRING”写的是在一个给定的行数,这样一个曲折的模式:(你可能想在一个固定的字体更加易读显示模式)

也就是说,给定一个字符串和行数,将字符串按照从左至右,从上至下的形式(Z 字形)排列,然后按行输出。如图。
exampleImg

Example:

exampleImg

And then read line by line: (输出)”PAHNAPLSIIGYIR”

string convert(string text, int nRows);

convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.

Point:

1、访问字符串中各个字符:

(1)str[索引值]
(2)str.charAt(索引值)
(3)字符串->数组:str.split(“”)

Step:

1、直接输出情况

当设置的行数为1(1行),直接输出。当行数大于字符串长度时(1列),直接输出。

2、不要太过依赖于数组,找出规律,直接将字符串的字符按规律取出来。

3、计算循环周期

就是说拉链的对应两端隔了几个。如图红色框中的P和A的距离。这样就可以按照排列中的行取出来。

exampleImg

循环周期的公式:2倍的行数 - 2。

var cyc = 2*numRows - 2;

因为,不管行数是多少,两列之间所有的字符都可以缩成一行,但是总会差首行和末行两个字符,加上第一列的字符,得出计算公式。

4、计算中间行的间隔元素

在计算中间行的时候会发现,每行都会有两条拉链之间的间隔元素。并且行数越多,中间的间隔元素也越多。现在固定一行 i,这一行所有间隔元素的循环公式为:列数 + 循环周期 - 2倍行数。

var mid = j + cyc - 2*i;

Code:

code

Question:

1、最初理解题目有误,是Z字型,而不是方波型。
2、误区:一直想把方波型存成二维数组的形式,然后按行取出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值