leetcode 6. N 字形变换(medium)(优质解法)

news2025/2/6 12:50:30

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

代码:

class Solution {
    public String convert(String s, int numRows) {
        if(numRows == 1) {
            return s;
        }
        int length=s.length();
        StringBuilder ret=new StringBuilder();

        //获取排列后 0 行(首行)的字符
        int index=0;
        int d=2*numRows-2;
        while(index<length){
            ret.append(s.charAt(index));
            //更改下标 index
            index+=d;
        }

        //获取排列后 1 ~ numRows-2 行的字符
        for(int k=1;k<=numRows-2;k++){
            int i=k,j=d-i;
            while(i<length||j<length){
                if(i<length){
                    ret.append(s.charAt(i));
                }
                if(j<length){
                    ret.append(s.charAt(j));
                }
                i+=d;
                j+=d;
            }
        }

        //获取排列后 numRows-1(末行)的字符
        index=numRows-1;
        while(index<length){
            ret.append(s.charAt(index));
            index+=d;
        }

        return ret.toString();

    }
}

题解:

        本题没有什么技巧,按照题目要求模拟题目描述的过程即可,最好通过画图找到其中的逻辑关系,以示例2为例,画出如下的图:

        可以来找以下其中含有的规则,我们要获取的正确答案就是从左到右逐行读取,首先要读取的是第 0 行(首行),读取到 P I N ,在字符串中的下标对应为 0 ,6 ,12,下标之间相差 6 ,P 到 L 有 6 个字符,所以递增的增量 d = 2*numRows - 2 ,2*4-2 = 6 ,所以要填充第一行的字符时,可以直接找到以 0 开始,增量为 d = 2*numRows - 2 的合法下标对应的字符

        对于 1 ~ numRows - 2 行的字符,可以每两个字符为一组,如字符 A ,L 为一组,A 的下标为 1 (行的下标与第一个字符的下标相同),L 的下标为 5 ,可以发现 L 下标为 d - A下标,所以根据行数可以得到 A, L字符的下标,S 的下标为 7 = A 的下标 + d ,I 的下标 = L 的下标 + d ,通过<A,L> 这两个下标分别加上 d ,得到下一组字符的下标,获取所有符合条件的下标对应的字符即可

        对于 numRows -1 行(尾行),第一个字符 P 的下标为 3 = 当前的行的下标,下一个字符 I 的下标为 9 ,可以看出与首行相同,字符的下标按照增量 d = 2*numRows - 2 递增,根据该规则获取符合条件的下标对应的字符即可

        通过上述分析,已经知道了每一行字符下标的规则,只需要按照该规则去一行一行的获取字符拼接到字符串中即可

        要注意该题有特殊情况,当 numRows = 1  时数据要放到一行上,进行排序后和原数组相同,直接返回原数组即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1336710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SecuSphere:一款功能强大的一站式高效DevSecOps安全框架

关于SecuSphere SecuSphere是一款功能强大的一站式高效DevSecOps解决方案&#xff0c;DevSecOps作为一个经过针对性设计的集中式平台&#xff0c;可以帮助广大研究人员管理和优化漏洞管理、CI/CD管道集成、安全评估和DevSecOps实践。 SecuSphere是一个功能全面的DevSecOps平台…

Android Studio 如何隐藏默认标题栏

目录 前言 一、修改清单文件 二、修改代码 三、更多资源 前言 在 Android 应用中&#xff0c;通常会有一个默认的标题栏&#xff0c;用于显示应用的名称和一些操作按钮。但是&#xff0c;在某些情况下&#xff0c;我们可能需要隐藏默认的标题栏&#xff0c;例如自定义标题栏…

python三 pycharrm安装

一、PyCharm下载安装 1&#xff09;访问官网 https://www.jetbrains.com/pycharm/download/#sectionwindows 下载「社区版 Community」 安装包 跟新 官网页面变动&#xff0c;找不到社区版 2&#xff09;下载完成后&#xff0c;「双击」运行安装包&#xff0c;开始安装。 …

西南科技大学计算机网络实验四(交换机基本配置与VLAN配置)

一、实验目的 熟悉交换机的各种基本配置与VLAN配置。 二、实验环境 使用RouterSim Network Visualizer软件来模拟网络设备与网络环境。 三、实验内容 1、交换机的基础配置 2、单台交换机上的简单VLAN设置 3、多台交换机上进行VLAN设置 四、实验步骤 4.1 交换机的基础配置…

微流控芯片建模

微流控芯片 北京线下&#xff1a;书本教材及所有案例模型文件、会议回放视频&#xff1b; Comsol Multiphysics建模专题&#xff1a;通道流动、通道结构、对流扩散、电泳、小变形流固耦合、相界面模拟&#xff1a;多相流液滴分离 IB-LBM建模专题&#xff1a;通道流动、耦合浸…

JavaScript开发日记:JavaScript语法糖和性能优化(一)

常用语法总结 声明变量&#xff08;var、let和const的定义详解&#xff09;定义同类型变量赋值运算符缩写判断Null 或 UndefinedJavaScript Array includes() 方法三元运算符 声明变量&#xff08;var、let和const的定义详解&#xff09; var&#xff1a;既可声明全局变量&…

2015年第四届数学建模国际赛小美赛C题科学能解决恐怖主义吗解题全过程文档及程序

2015年第四届数学建模国际赛小美赛 C题 科学能解决恐怖主义吗 原题再现&#xff1a; 为什么人们转向恐怖主义&#xff0c;特别是自杀性恐怖主义&#xff1f;主要原因是什么&#xff1f;这通常是大问题和小问题的结合&#xff0c;或者是一些人所说的“推拉”因素。更大的问题包…

20 Redis进阶 - 运维监控

1、理解Redis监控 Redis运维和监控的意义不言而喻&#xff0c;可以以下三个方面入手 1.首先是Redis自身提供了哪些状态信息&#xff0c;以及有哪些常见的命令可以获取Redis的监控信息; 2.一些常见的UI工具可以可视化的监控Redis; 3.理解Redis的监控体系;2、Redis自身状态及命…

Python学习之判断语句,从基础到实践

文章目录 前言为什么学习判断语句布尔类型和比较运算符if语句的基本格式练习案例&#xff1a;成年人判断 if else 语句if elif else语句练习案例&#xff1a;猜猜心里数字 判断语句的嵌套实战案例关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品…

uniapp使用localStorage存储值遇到的问题

1. 数据存储localStorage llocalStorage是本地存储&#xff0c;是将数据存储到浏览器的方法&#xff0c;一般在跨页面时使用。 uniapp提供数据存和取的api。 uni.setStorage({key:runTime,data:this.sumRTtime.toFixed(3),success:function(){console.log(success);})从图中可…

鸿蒙应用开发者认证(基础、高级)

认证地址 认证地址&#xff1a;HarmonyOS认证地址 注意事项 拥有华为云开发者账号要实名认证 认证方式 在线考试形式、判断题、单选题、多选题 &#xff0c;基础认证90分及格&#xff0c;高级认证80分及格&#xff0c;证书两年有效 不建议各位百度答案&#xff0c;最好看完Ha…

众和策略:12月新批国产网游版号数量过百

上星期五&#xff08;22日&#xff09;&#xff0c;A股冲高回落&#xff0c;三大股指挨近午盘拉升走高&#xff0c;午后再度回落走低&#xff0c;沪指尾盘跌幅收窄。到收盘&#xff0c;沪指跌0.13%报2914.78点&#xff0c;深成指跌0.39%报9221.31点&#xff0c;创业板指跌0.37%…

nvm node 安装与配置

nvm Node Version Manager&#xff08;NVM&#xff09; 是一种用于管理多个主动节点.js版本的工具。 nvm官网下载地址 https://github.com/coreybutler/nvm-windows/releases 如果电脑上之前已经单独安装了node&#xff0c;先卸载&#xff08;可以在控制面板里面卸载&#xf…

【JVM】虚拟机栈与本地方法栈

一、虚拟机栈&#xff08;VM Stack&#xff09; 1.1&#xff09;什么是虚拟机栈   虚拟机栈是用于描述java方法执行的内存模型。   每个java方法在执行时&#xff0c;会创建一个“栈帧&#xff08;stack frame&#xff09;”&#xff0c;栈帧的结构分为“局部变量表、操作数…

引用jquery.js的html5基础页面模板

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

目标追踪:使用ByteTrack进行目标检测和跟踪

BYTE算法是一种简单而有效的关联方法&#xff0c;通过关联几乎每个检测框而不仅仅是高分的检测框来跟踪对象。这篇博客的目标是介绍ByteTrack以及多目标跟踪&#xff08;MOT&#xff09;的技术。我们还将介绍在样本视频上使用ByteTrack跟踪运行YOLOv8目标检测。 多目标跟踪&…

JoySSL证书

很多人喜欢JoySSL证书&#xff0c;主要是因为 JoySSL 提供了许多有吸引力的特性和优势。首先&#xff0c;JoySSL 提供的 SSL 证书价格相对较为实惠&#xff0c;使得小型企业和个人网站也能够轻松承担起加密保护的成本。其次&#xff0c;JoySSL 提供的证书具有很高的安全性&…

华为云Stack 8.X流量模型分析(三)

三、VPC内部二层流量模型分析 1.不同宿主机下虚拟机互访 VM1发送arp请求&#xff0c;arp报文根据流表到达br-tun&#xff0c;br-tun给予VM1到达VM2的MAC信息。此时arp报文不出宿主机&#xff08;Host1&#xff09;&#xff1b; **注意&#xff1a;**br-tun内的信息是由管理平…

Android Termux安装SSH结合内网穿透实现远程SFTP文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

Windows操作系统:共享文件夹,防火墙的设置

1.共享文件夹 1.1 共享文件夹的优点 1.2 共享文件夹的优缺点 1.3 实例操作 ​编辑 2.防火墙设置 2.1 8080端口设置 3.思维导图 1.共享文件夹 1.1 共享文件夹的优点 优点 协作和团队合作&#xff1a;共享文件夹使多个用户能够在同一文件夹中协作和编辑文件。这促进了团…