标签:
我的leetcode之旅,该篇章主要完成使用Java实现算法。这是第6篇ZigZag Conversion
全部代码下载:Github链接:github链接,点击惊喜;写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;
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"
.
1.可以用笔写出5行的序号zigZag然后寻找规律
2.从上图我们就可以看出规律除了第一行和最后一行都遵循一个规律:
都是从:i,i+(numRows-1-i)*2,i+(numRows-1-i)*2+2*i;…
3.使用StringBuilder进行迭代添加即可
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)
leetcode06- ZigZag Conversion之Java版本
标签:
原文地址:http://blog.csdn.net/peace1213/article/details/51569470