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     }
  • 相关阅读:
    pywinauto首页、文档和下载
    Android UI自动化测试最佳实践
    5个最佳的Android测试框架(带示例) – 码农网
    (转)使用graphviz绘制流程图
    使用 Graphviz 生成自动化系统图
    程序员的绘图利器 — Graphviz
    绘图工具graphviz学习使用
    Git Book 中文版
    [git] 更新到某个指定版本
    LindDotNetCore~Aspect面向方面编程
  • 原文地址:https://www.cnblogs.com/scecit/p/4967751.html
Copyright © 2011-2022 走看看