这道题麻烦在于理解题意:要把字符串摆成N字型。
解法就是把一维的数组映射到一个二维坐标轴中,这个映射是一一映射.
算出每个s[i]对应的坐标轴[x,y]然后把y=0,1,2...nRows-1的字幕填入结果即可。
直接用rst+=ca[i]会超时,可见String的+还是一个比较费时的操作。
public class Solution {
public static String convert(String s, int nRows) {String rst="";
char[] ca=s.toCharArray();
int n=ca.length;
char[] rst_c=new char[n];
int[] index=new int[2*n];
int i,j,k;
int whole,remain,unit;
if(nRows==1)
return s;
unit=nRows*2-2;
for(i=0;i<n;i++)
{
whole=i/unit;
remain=i%unit;
if(remain<nRows)
{
index[2*i]=(nRows-1)*whole;
index[2*i+1]=remain;
}
else
{
remain=remain-nRows+1;
index[2*i]=(nRows-1)*whole+remain;
index[2*i+1]=nRows-1-remain;
}
}
k=0;
for(j=0;j<nRows;j++)
for(i=0;i<n;i++)
{
if(index[2*i+1]==j)
{
rst_c[k]=ca[i];k++;
}
}
rst=new String(rst_c);
return rst;
}
}
344

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



