机器学习之路漫漫
MLEW(Maching Learning & Endless Way)

导航

 

思路1:String[numRow]行字符串数组。读取原始字符串每一个字符,设置行变量 nrow和行标志位flag(向下一行为1或向上一行为-1)。将该字符连接到数组中对应的行字符串,同时nrow+=flag。

 1     public String convert(String s, int numRows) {
 2         if(s==null||s.length()==0||numRows<=1){
 3             return s;
 4         }
 5         String[] strRowArr=new String[numRows];     
 6         Arrays.fill(strRowArr, "");      
 7         int flag=1;    //向下走为1,向上走位-1
 8         int nrow=0;    //当前字符应该在的行
 9         for(int i=0;i<s.length();i++){
10             char t=s.charAt(i);
11             strRowArr[nrow]+=t;
12             nrow+=flag;
13             if(nrow>=numRows){
14                 //nrow已经越下界,更新为倒数第二行,标志flag也变为-1
15                 nrow=(numRows-1)-1;
16                 flag=-1;
17             }
18             if(nrow<0){
19                 //nrow已经越上界,更新为第二行,标志位flag变为1
20                 nrow=1;
21                 flag=1;
22             }
23         }
24         //行字符串数组 拼接成一个完整的字符串
25         String rowString="";
26         for(String str:strRowArr){
27             rowString+=str;
28         }
29         return rowString;
30     }

 思路2:每一行必然包含间隔为 2*numRows-2的字符 , 中间行间隔还需要加上2*numRows-2-2*i

 1     public String convert(String s, int numRows){
 2         if(s==null||s.length()==0||numRows<=1){
 3             return s;
 4         }
 5         int tag=2*numRows-2;
 6         String result="";
 7         for(int i=0;i<numRows;i++){    //i行
 8             for(int j=i;j<s.length();j+=tag){//读取每一行应该有的字符
 9                 result+=s.charAt(j);
10    
11                 //如果是非首行和尾行,还需要添加tag间隔中间字符
12                 if(i>0&&i<numRows-1){
13                     int t=j+tag-2*i;
14                     if(t<s.length()){
15                         result+=s.charAt(t);
16                     }
17                 }
18             }
19         }
20         return result;
21     }

 

posted on 2015-11-15 23:16  suchang  阅读(146)  评论(0编辑  收藏  举报