zoukankan      html  css  js  c++  java
  • 006Z字形变换

    写在前面,参考的是力扣官网的画解算法

    一、java代码

    /*
     * @lc app=leetcode.cn id=6 lang=java
     *
     * [6] Z 字形变换
     */
    
    // @lc code=start
    class Solution {
        public String convert(String s, int numRows) {
    
            //特别的,如果numrows=1则表示当前字符串即为结果
            if(numRows==1)
                return s;
            
            //判断字符串的数组会不会比给定的行数小
            int len=Math.min(s.length(),numRows);
    
            //发现StringBuilder 被当做array来使用,
            //StringBuilder[]相当于array of array
            //要按row来进行遍历,每一个row先allocate一个StringBuilder
            String []rows=new String[len];
    
            //先为每一个row赋空
            for(int i=0;i<len;i++) rows[i]="";
    
            //定义down,loc
            //loc表示当前字符串数组的下标
            int loc=0;
            //表示是否向下,在第0行和第numRows-1行要变向
            boolean down=false;
    
            //遍历给定的字符串
            for(int i=0;i<s.length();i++){
                //将当前字符加入当前字符串中
                rows[loc]+=s.substring(i,i+1);
    
                //考虑给down变向
                if(loc==0||loc==numRows-1)
                    down=!down;
                //判断loc是+还是-
                loc+=down?1:-1;
            }
    
            //最终要输出的结果,先赋空
            String ans="";
            //循环遍历每一行的row,都加到要输出的结果中
            for(String row:rows){
                ans+=row;
            }
            return ans;
    
        }
    }
    // @lc code=end
    
    
    

    二、字符串思路分析

    整体思路

    遍历字符串,遍历过程中将每行都看成新的字符串构成字符串数组,最后将该数组拼接起来即可

    特别说明

    numrows

    如果numrows=1,则说明当前字符串即为结果,直接返回
    否则,整个字符串需要经历,向下向右,向上向右,这样的反复循环过程

    down,loc

    设定down变量表示是否向下,loc变量表示当前字符串数组的下标!

    如果down为true,则loc+=1,字符串数组下标向后移动,将当前字符加入当前字符串中

    如果down为false,则表示向右,则loc-=1,字符串数组下标向前移动,将当前字符加入当前字符串中

    时间复杂度O(n)

    三、画图解析

    拆解:

    3.1

    3.2

    3.3

    3.4

    3.5

    3.6

    3.7

    3.8

    3.9

  • 相关阅读:
    drf框架 APView的请求生命周期
    web API接口、restful规范
    vue项目安装插件配置
    vue项目、路由
    day67
    vue组件
    day66
    HDFS(Hadoop Distribute File System)
    JVM运行优化学习笔记
    ELK(检索)
  • 原文地址:https://www.cnblogs.com/lxr-xiaorong/p/13445488.html
Copyright © 2011-2022 走看看