LeetCode 第6题:Z字形变换
- 题目:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串。
- 解法一:一上来就开始找规律2333333,结果是超出了时间限制。。。
class Solution {
public String convert(String s, int numRows) {
String ans="";
int len=s.length();
int k=1,i;
for(i=0;i<len;){
ans+=s.charAt(i);
i+=numRows+numRows-2;
}
for(int n=2;n<numRows;n++){
boolean isJi=true;
for(i=n-1;i<len;){
if(isJi){
ans+=s.charAt(i);
i+=2*(numRows-n);
isJi=false;
}else{
ans+=s.charAt(i);
i+=2*(n-1);
isJi=true;
}
}
}
for(i=numRows-1;i<len;){
ans+=s.charAt(i);
i+=numRows+numRows-2;
}
return ans;
}
}
- 解法二:好奇妙的解法,里面有很多我不太懂的语句让代码变得很简单。
class Solution {
public String convert(String s, int numRows) {
if(numRows < 2) return s;
List<StringBuilder> rows = new ArrayList<StringBuilder>();
for(int i = 0; i < numRows; i++) rows.add(new StringBuilder());
int i = 0, flag = -1;
for(char c : s.toCharArray()) {
rows.get(i).append(c);
if(i == 0 || i == numRows -1) flag = - flag;
i += flag;
}
StringBuilder res = new StringBuilder();
for(StringBuilder row : rows) res.append(row);
return res.toString();
}
}
作者:jyd
链接:https://leetcode-cn.com/problems/zigzag-conversion/solution/zzi-xing-bian-huan-by-jyd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。