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

[Leetcode] ZigZag Conversion (Java)

2013-12-26 12:52 666 查看
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"
.

开始写成

public class ZigZagConversion {
public String convert(String s, int nRows) {
if(s.length()<2 || nRows<=1)
return s;
StringBuilder sb = new StringBuilder();
for(int i=0;i<nRows;i++) {
int temp = i;
while(temp<s.length()) {
sb.append(s.charAt(temp));
if(i!=0&&i!=nRows-1&&temp+2*(nRows-i-1)<s.length()){
sb.append(s.charAt(temp+2*(nRows-i-1)));
}
temp +=2*(nRows-1);
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(new ZigZagConversion().convert("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 6));
}
}


一直报错Memory Limit Exceeded

后来改成
public class ZigZagConversion {
public String convert(String s, int nRows) {
if(s.length()<2 || nRows<=1)
return s;
String ss = "";
for(int i=0;i<nRows;i++) {
int temp = i;
while(temp<s.length()) {
ss+=s.charAt(temp);
if(i!=0&&i!=nRows-1&&temp+2*(nRows-i-1)<s.length()){
ss+=s.charAt(temp+2*(nRows-i-1));
}
temp +=2*(nRows-1);
}
}
return ss;
}
public static void main(String[] args) {
System.out.println(new ZigZagConversion().convert("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 6));
}
}


就没事了

难道StringBuilder比好多String占的memory还大么。。去看看源码好了。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: