leetcode06- ZigZag Conversion之Java版本
Posted 伊豚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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代码
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版本的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode - 6 - ZigZag Conversion
#Leetcode# 6. ZigZag Conversion