• 图解LeetCode——6. Z 字形变换(难度:中等)


    一、题目

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

    比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

    之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

    请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);

    二、示例

    2.1> 示例 1:

    【输入】s = "PAYPALISHIRING", numRows = 3
    【输出】"PAHNAPLSIIGYIR"

    示例 2:

    【输入】s = "PAYPALISHIRING", numRows = 4
    【输出】"PINALSIGYAHRPI"

    示例 3:

    【输入】s = "A", numRows = 1
    【输出】"A"

    提示:

    • 1 <= s.length <= 1000
    • s 由英文字母(小写和大写)、',' 和 '.' 组成
    • 1 <= numRows <= 1000

    三、解题思路

    根据题意可知,我们要遍历整个字符串,然后将其“拼装”为一个Z字型。 那么,在执行拼装操作时,其实就是一个“从上向下”,当长度达到numRow的时候,在执行反方向的“从下向上”。那么,对于每层的元素,我们可以通过StringBuilder数组进行保存,那么对应数组存储的下标index,我们需要一个boolean变量reverse,当它为false的时候,index执行加1操作,当它为true时,index执行减1操作。当所有字符串s都遍历并存储到StringBuilder数组之后,我们再执行最后结果拼装即可。具体操作如下所示:

    四、代码实现

    1. class Solution {
    2.     public String convert(String s, int numRows) { 
    3.         if (numRows == 1return s;
    4.         StringBuilder[] sbArray = new StringBuilder[numRows];
    5.         for (int i = 0; i < numRows; i++
    6.             sbArray[i] = new StringBuilder();
    7.         boolean reverse = false;
    8.         int index = 0;
    9.         for (int i = 0; i < s.length(); i++) {
    10.             sbArray[index].append(s.charAt(i));
    11.             if (index == numRows - 1) reverse = true;
    12.             if (index == 0) reverse = false;
    13.             index = reverse ? index - 1 : index + 1;
    14.         }
    15.         StringBuilder result = new StringBuilder();
    16.         for (StringBuilder sb : sbArray) 
    17.             result = result.append(sb);
    18.         return result.toString();
    19.     }
    20. }

    今天的文章内容就这些了:

    写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

    更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

  • 相关阅读:
    Linux UWB Stack实现——MCPS通道访问
    R语言抑制代码显示警告和错误信息:suppressMessage函数和suppressuWarnings函数抑制警告信息的显示
    1、验证1101序列(Moore)
    20分钟---Vue2->Vue3
    KL散度与率失真优化问题
    Ubuntu22.04 | 使用教程
    WebStorm下载与安装2022版教程注册码WebStorm使用配置
    报错缺少class(org.apache.hadoop.hdfs.DistributedFileSystem)
    Git 分支管理及规范
    java计算机毕业设计华水疫情预警与防护用品调度系统MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/qq_26470817/article/details/126872843