第一次数组方式,时间112ms,
public class Solution {
public String convert(String s, int numRows) {
String result="";
if(numRows==1){
return s;
}
if(s!=null && !("".endsWith(s))){
char[] charArray = s.toCharArray();
int length = charArray.length, flag=0;
int cols = (length/(numRows*2-2))*(numRows-1)+(numRows-1);
char[][] rowCols = new char[cols][numRows];
for(int i = 0; i < cols && flag < length; i++ ){
if(i%(numRows-1) == 0){
for(int j = 0; j < numRows && flag < length; j++ ){
rowCols[i][j]=charArray[flag++];
}
}else{
if(flag < length){
rowCols[i][numRows-1-(i%(numRows-1))]=charArray[flag++];
}
}
}
for(int i = 0; i < numRows; i++ ){
for(int j = 0; j < cols; j++ ){
if(rowCols[j][i] != 0){
result+=rowCols[j][i];
}
}
}
}
return result;
}
}第二次按照规律,时间51ms:
public class Solution {
public String convert(String s, int numRows) {
if(numRows == 1){
return s;
}
StringBuilder result = new StringBuilder();
int item = numRows - 1, len = 2 * item, index = 0;
while(item >= 0){
int now = index++, next1 = item * 2, next2 = len - next1;
boolean flag = true;
while(now < s.length()){
result.append(s.charAt(now));
if(index == 1 || index == numRows){
if(index == 1){
now += next1;
}else{
now += next2;
}
}else{
if(flag){
now += next1;
}else{
now += next2;
}
flag = !flag;
}
}
item--;
}
return result.toString();
}
}
本文介绍了一种将字符串以Z形排列的方式进行转换的算法实现,提供了两种不同的方法:一种是通过数组方式实现,时间复杂度为112ms;另一种是通过观察规律简化实现,时间复杂度降低到了51ms。每种方法都详细展示了其核心代码逻辑。

458

被折叠的 条评论
为什么被折叠?



