我是靠谱客的博主 强健胡萝卜,最近开发中收集的这篇文章主要介绍6. Z 字形变换将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
//使用二维数组存储数据,然后合并各个数组,再将合并后数组的空白符号删除,但是时间复杂度较高
class Solution {
public String convert(String s, int numRows) {
if (numRows==1) return s;
char[][] a=new char[numRows][1000];
int j=0;
int k=0;
int flag =0;
int[] b=new int[numRows];
for (int i = 0; i <numRows ; i++) {
b[i]=0;
}
for (int i=0;i<s.length();i++){
a[j][b[j]]=s.charAt(i);
b[j]++;
if (flag==0){
j++;
}
if (flag==1){
j--;
}
if (j==numRows-1){
flag=1;
}
if (j==0){
flag=0;
}
}
String[] z=new String[numRows];
for (int c=0;c<numRows;c++){
z[c]=String.valueOf(a[c]);
z[c]= z[c].replaceAll("[\u0000]","");
}
for (int i = 1; i <numRows ; i++) {
z[0]=z[0].concat(z[i]);
}
return z[0];
}
}
//改进后,用一个一维字符串数组存储元素,最后拼接在一起,时间复杂度低
public class convert {
public static String convert1(String s,int numRows){
if (numRows==1) return s;
String[] a=new String[numRows];
for (int i = 0; i <numRows ; i++) {
a[i]="";
}
int j=0;
int k=0;
int flag =0;
for (int i=0;i<s.length();i++){
a[j]=a[j].concat(String.valueOf(s.charAt(i)));
if (flag==0){
j++;
}
if (flag==1){
j--;
}
if (j==numRows-1){
flag=1;
}
if (j==0){
flag=0;
}
}
for (int i = 1; i <numRows ; i++) {
a[0]=a[0].concat(a[i]);
}
return a[0];
}
最后
以上就是强健胡萝卜为你收集整理的6. Z 字形变换将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。的全部内容,希望文章能够帮你解决6. Z 字形变换将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复