您的位置:首页 > 编程语言 > Java开发

leetcode06- ZigZag Conversion之Java版本

2016-06-02 19:05 295 查看
我的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代码

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ZigZag leetcode