题目描述
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
该代码超时了,需要选择更加高效的代码。
自己的代码2
该代码可以通过,将时间复杂度降到了O(n)。
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
该代码超时了,需要选择更加高效的代码。
package leetcode;
import java.util.ArrayList;
import java.util.List;
public class ZigZagConversion {
public String convert(String s, int nRows) {
if(s == null || s == "") return s;
if(nRows <= 0) return null;
if(nRows == 1) return s;
if(nRows >= s.length()) return s;
String str = "";
for(int i = 0; i < nRows; i++){
int step = 0;
if(i == 0 || i == nRows-1) step = 4;
else step = 2;
int sum = i;
while(sum <= s.length()-1){
str += s.charAt(sum);
sum += step;
}
}
return str;
}
public static void main(String[] args) {
//String s = "";
String s = "PAYPALISHIRING";
int nRows = 3;
ZigZagConversion zzc = new ZigZagConversion();
System.out.println(zzc.convert(s, nRows));
}
}
自己的代码2
该代码可以通过,将时间复杂度降到了O(n)。
package leetcode;
import java.util.ArrayList;
import java.util.List;
public class ZigZagConversion {
@SuppressWarnings("unchecked")
public String convert(String s, int nRows) {
if(s == null || s == "") return s;
if(nRows <= 0) return null;
if(nRows == 1) return s;
if(nRows >= s.length()) return s;
List<Character>[] listArray = new List[nRows];
for(int i = 0; i < nRows; i++){
List<Character> list = new ArrayList<Character>();
listArray[i] = list;
}
int times = 0;
boolean ascending = true;
for(int i = 0; times < s.length(); times++){
listArray[i].add(s.charAt(times));
if(i == 0) {
ascending = true;
}
else if(i == nRows - 1){
ascending = false;
}
if(ascending) i++;
else i--;
}
String str = "";
for(List<Character> list : listArray){
for(char c : list)
str += c;
}
return str;
}
public static void main(String[] args) {
//String s = "";
String s = "PAYPALISHIRING";
int nRows = 3;
ZigZagConversion zzc = new ZigZagConversion();
System.out.println(zzc.convert(s, nRows));
}
}