zoukankan      html  css  js  c++  java
  • 【Leetcode-easy】ZigZag Conversion

    思路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     }
  • 相关阅读:
    法里数列
    母函数笔记
    贝尔数的指数母函数推导
    jQuery监听文本框值改变触发事件(propertychange)
    java-->TreeMap的使用
    查找-->二分查找和插值查找java实现
    查找-->斐波那契查找算法
    排序-->归并排序
    希尔排序(交换法和位移法)
    8皇后算法的简单实现(回溯)
  • 原文地址:https://www.cnblogs.com/scecit/p/4967751.html
Copyright © 2011-2022 走看看