peace唠叨

leetcode06- ZigZag Conversion之Java版本

我的leetcode之旅,该篇章主要完成使用Java实现算法。这是第6篇ZigZag Conversion

全部代码下载:Github链接:github链接,点击惊喜;写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;

1.题目简介:


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

2.我的思路:

1.可以用笔写出5行的序号zigZag然后寻找规律
2.从上图我们就可以看出规律除了第一行和最后一行都遵循一个规律:
都是从:i,i+(numRows-1-i)2,i+(numRows-1-i)2+2*i;…
3.使用StringBuilder进行迭代添加即可

3.我的AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.rlovep.string;
/**
* ZigZag Conversion
* 我的思路:
* 1.可以用笔写出5行的序号zigZag然后寻找规律
* 2.从上图我们就可以看出规律除了第一行和最后一行都遵循一个规律:
* 都是从:i,i+(numRows-1-i)*2,i+(numRows-1-i)*2+2*i;...
* 3.使用StringBuilder进行迭代添加即可
* @author peace
*
*/

public class ZigZag {
public String convert(String s, int numRows) {
if(s==null||"".equals(s)||numRows==1)return s;
StringBuilder sb=new StringBuilder();
int index=0;
int length=s.length();
int l1=(numRows-1)<<1;
while(true){

if(index<length)
{
sb.append(s.charAt(index));
index+=l1;
}else{
break;
}
}
for(int i=1;i<numRows-1;i++){
l1=(numRows-1-i)<<1;
int l2=i<<1;
index=i;
while(true){
if(index<length){
sb.append(s.charAt(index));
index+=l1;
}else{
break;
}
if(index<length){
sb.append(s.charAt(index));
index+=l2;
}else{
break;
}
}
}
index=numRows-1;
l1=(numRows-1)<<1;
while(true){

if(index<length)
{
sb.append(s.charAt(index));
index+=l1;
}else{
break;
}
}
return sb.toString();
}
}

好的本章介绍到这里 来自伊豚wpeace(blog.wpeace.cn)

Peace wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!