zoukankan      html  css  js  c++  java
  • [LeetCode]6.Z 字形变换

    题目描述

    在这里插入图片描述
    在这里插入图片描述

    方法

    • 按行排序

    个人理解:

    • numRows个StringBuilder对象代表numRows
    • 使用一个curRow变量用于跟踪当前行,用一个goingDown变量跟踪遍历方向(curRow++还是--
    • 顺序遍历字符串字符,将字符添加到对应的行(StringBuilder对象)中
    • 整合所有的行(StringBuilder对象),并输出
    class Solution {
        public String convert(String s, int numRows) {
            //如果行数为1行,返回原字符串
            if(numRows == 1) return s;
            //定义一个列表用于存储每一行
            List<StringBuilder> rows = new ArrayList<>();
            //使用min(numRows, s.length()代表非空行数是因为字符串长度可能小于行数
            for(int i = 0; i < Math.min(numRows, s.length()); i++) {
                rows.add(new StringBuilder()); 
            }
            //定义当前行的跟踪变量
            int curRow = 0;
            //定义方向的跟踪变量
            boolean goingDown = false;
            
            for(char c : s.toCharArray()) {
                //获取当前行,并添加字符
                rows.get(curRow).append(c);
                if(curRow == 0 || curRow == numRows - 1)
                goingDown = !goingDown;
                curRow+=goingDown ? 1 : -1;
            }
            StringBuilder ret = new  StringBuilder();
            for(StringBuilder row : rows)ret.append(row);
            return ret.toString();
        }
    }
    
    • 按行访问

    个人理解:

    • 第一行Z型两竖边上的字符间隔为cycleLen = 2 * numRows - 2
    • i遍历每一行,j 代表第一行Z型竖边上的字符的下标,j+i 代表第i行Z型竖边上的字符的下标’j+i<n,每一行两竖边之间只有一个字符,该字符的下标为 j + cycleLen - i < n
    • 按行遍历,根据i添加字符
      在这里插入图片描述
    class Solution {
        public String convert(String s, int numRows) {
            //字符串长度
            int n = s.length();
            if(numRows == 1) return s;
            //定义字符间隔cycleLen
            int cycleLen = 2 * numRows - 2;
            //用于存储字符串
            StringBuilder res = new StringBuilder();
            //两层循环,i代表行数,j代表第一行相隔cycleLen的字符下标,
            //j+i代表第i行相隔cycleLen的下标,j+cycleLen - i代表间隔中间的字符
            for(int i = 0; i < numRows; i++) {
                for(int j = 0; j + i < n; j += cycleLen) {
                    res.append(s.charAt(j+i));
                    if(i != 0 && i != numRows - 1 && j + cycleLen - i < n) {
                        res.append(s.charAt(j + cycleLen - i));
                    }
                }
            }
            return res.toString();
        }
    }
    
  • 相关阅读:
    python网络爬虫与信息提取——5.信息组织与提取方法
    python网络爬虫与信息提取——4.Beautiful Soup库入门
    python网络爬虫与信息提取——3.requests爬虫实战
    python网络爬虫与信息提取——2.网络爬虫排除标准robots
    python网络爬虫与信息提取——1.requests库入门
    时间戳转日期
    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目
    数组、对象等的按值传递与数字、字符串不同
    用flex做垂直居中
    手机端页面自适应解决方案-rem布局
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860109.html
Copyright © 2011-2022 走看看