leetcode6 -- z字形变换

题目描述:

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

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

P   A   H   N
A P L S I I G
Y   I   R

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

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

示例 2:

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I

示例 3:

输入:s = "A", numRows = 1
输出:"A"

提示:

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

解法:

Z字形变换先向下,后斜向上,再向下循环,可以用一个boolean值goDown来判断遍历过程中的方向是向上还是向下,当当前行到了第一行或者最后一行时,goDown的状态改变,当前行+1或-1。

1.创建一个列表,列表长度为numRows,里面的每个元素都是一个StringBuilder,来存储对应一行的所有元素,最后再把每一行的元素拼接起来

2.创建两个变量,nowRow表示当前行,goDown表示当前前进的方向,当goDown为true时,向下走,goDown为false时,向上走。

3.将每行对应字符添加到对应的StringBuilder中。

代码:

class Solution {public String convert(String s, int numRows) {if (numRows == 1 || numRows >= s.length()) {return s;}List<StringBuilder> rows = new ArrayList<>();for (int i = 0; i < numRows; i++) {rows.add(new StringBuilder());}boolean goDown = false;int nowRow = 0;for (int i = 0; i < s.length(); i++) {// 第i行对应加当前字符rows.get(nowRow).append(s.charAt(i));if (nowRow == 0 || nowRow == numRows - 1) {goDown = !goDown; // 第一次会变成true,向下走,其余情况取反}nowRow += goDown ? 1 : -1; // goDown为true也就是向下走,+1,否则-1}StringBuilder res = new StringBuilder();for (StringBuilder row : rows) {res.append(row);}return res.toString();}
}

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

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

相关文章

springboot系列十一:Thymeleaf

文章目录 官方文档基本介绍Thymeleaf机制说明Thymeleaf语法表达式运算符th属性迭代条件运算使用Thymeleaf th属性需要注意点 Thymeleaf综合案例需求说明思路分析代码实现 作业布置 官方文档 在线文档: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 离线…

DNS域名管理系统、搭建DNS服务

1.DNS概述 1.DNS&#xff08;domain name system &#xff09; 域名管理系统 域名&#xff1a; 由特定的格式组成&#xff0c;⽤来表示互联⽹中某⼀台计算机或者计算机组的名称&#xff0c;能够使⼈更⽅便的访问互联⽹&#xff0c;⽽不⽤记住能够被机器直接读取的IP地址。 计算…

C++:模板(函数模板,类模板)

目录 泛型编程 函数模板 函数模板格式 函数模板的原理 函数模板的实例化 类模板 类模板格式 类模板实例化 模板分为函数模板和类模板 在C中使用模板可以让我们实现泛型编程 泛型编程 如果我们需要实现一个加法add函数&#xff0c;那么会怎么实现呢&#xff1f; int…

python 闭包、装饰器

一、闭包&#xff1a; 1. 外部函数嵌套内部函数 2. 外部函数返回内部函数 3.内部函数可以访问外部函数局部变量 闭包&#xff08;Closure&#xff09;是指在一个函数内部定义的函数&#xff0c;并且内部函数可以访问外部函数的局部变量&#xff0c;即使外部函数已经执行…

Python Formulas模型以JSON格式文件导出导入

1. 导入formulas和json包 在加载模型之前&#xff0c;导入formulas和json包。 import formulas, json2. 加载Excel模型 加载一个公式复杂的Excel模型&#xff0c;该模型耗时较长&#xff0c;我们可以观察使用json格式是否能更高效。 xl_model formulas.ExcelModel().load(…

oracle 基础知识表的主键

一、表的约束条件 •约束条件是施加在表的字段上的一组限制条件&#xff0c;它使得只有符合限制条件要求的数据才能输入表。 •保证了表中的数据的正确性 i.约束条件包括了&#xff1a;非空和唯一和核对&#xff0c;即not null 和unique 和check null的含义:不确定 3个人去捡苹…

重磅 - Github 上免费大屏来啦,教你快速搭建积木报表

先看看大屏效果 JimuReport积木报表的集成版本&#xff0c;已经提供了免费数据可视化设计工具。 支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表和门户设计&#xff1b;目前支持多种图表类型&#xff1a;柱形图、折线图、散点图、饼图、环形图、面积图、漏斗…

Java基础巩固 -- 面向对象

Java基础巩固 – 面向对象 简介&#xff1a;博主本人由于在毕业前忙于找工作&#xff0c;因此选择了Java后端开发&#xff0c;但学习过程比较碎片化&#xff0c;并没有进行系统性学习。本章博客将会系统性重温Java的一些基础知识和概念。 1.面向对象 1.1 概念 面向对象是一…

微服务概念篇-服务提供者/服务消费者

微服务概念篇-服务提供者/服务消费者 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、服务提供者是什么&#xff1f; 提供接口给其他微服务进行调用的服务称之为服务提供者 二、服务消费者是什么? 调用其他服务的接口的服务称之为服务消费者 三…

学习网络系统的心得体会

网络系统 零拷贝 磁盘是计算机系统中读写速度最慢的的硬件之一&#xff0c;而零拷贝技术是用于提高文件传输性能的&#xff0c;通过减少上下文切换次数与数据拷贝的次数从而提高传输性能。 操作系统中IO的流程 大体流程 收到IO请求由用户态切换到内核态&#xff0c;CPU发送…

【vueUse库Time模块各函数简介及使用方法--全篇】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseTime函数1. useDateFormat…

# Redis 入门到精通(七)-- redis 删除策略

Redis 入门到精通&#xff08;七&#xff09;-- redis 删除策略 一、redis 删除策略–过期数据的概念 1、Redis 中的数据特征 Redis 是一种内存级数据库&#xff0c;所有数据均存放在内存中&#xff0c;内存中的数据可以通过TTL指令获取其状态。 XX &#xff1a;具有时效性…

Linux下git入门操作

0.创建仓库 可以按这个配置来&#xff0c;.gitignore中存放了上传时忽略的文件类型后缀。 1.clone仓库 在gitee上创建好仓库&#xff0c;点击克隆/下载&#xff0c; 复制地址fyehong/Linux_notes 。 在所需的文件夹中放置仓库。比如我在文件夹lesson9下存储仓库。就在less…

C# 与C++ cli

cli CLI&#xff08;Command Line Interface&#xff09;是一种通过命令行界面与计算机系统进行交互的方式。它提供了一种以文本形式输入命令和接收系统输出的方法&#xff0c;用于执行各种操作和管理计算机系统。以下是CLI的详细解释&#xff1a; 一、定义与基本概念 定义&…

Linux系统下的DevOps工具链:从CI到CD

Linux系统下的DevOps工具链覆盖了从持续集成&#xff08;CI&#xff09;到持续部署&#xff08;CD&#xff09;的全过程&#xff0c;以下是关键环节及其常用工具&#xff1a; 1.版本控制 (SCM) •Git: 管理代码版本&#xff0c;分支合并&#xff0c;是DevOps流程的基础。 2.…

Android中Intent和IntentFilter

目录 一 概述二 使用2.1 显式调用2.2 隐式调用2.3 IntentFilter三个属性2.3.1 action2.3.2 catagory2.3.3 data 一 概述 intent是意图&#xff0c;intentFilter是意图过滤器。使用intent&#xff0c;可以启动activity、service、broadcastReceiver等。 二 使用 2.1 显式调用…

jenkins面试题全集

1. 简述什么是Jenkins &#xff1f; Jenkins是一个开源的持续集成的服务器&#xff0c;Jenkins开源帮助我们自动构建各类项目。 Jenkins强大的插件式&#xff0c;使得Jenkins可以集成很多软件&#xff0c;可以帮助我们持续集成我们的工程项目&#xff0c;对于我们测试来说&…

机车 - 凯旋(Triumph)Street Triple 765系列的R版和RS版的区别

凯旋&#xff08;Triumph&#xff09;Street Triple 765系列的R版和RS版有一些显著的差异&#xff0c;主要体现在性能、配置和价格方面。选择哪一个版本取决于你的骑行需求、预算和骑行经验。以下是两者的主要区别和一些建议&#xff1a; 差异点 1. 性能&#xff1a; * 发动机…

AI学习指南机器学习篇-t-SNE的优缺点

AI学习指南机器学习篇-t-SNE的优缺点 在机器学习领域&#xff0c;t-SNE&#xff08;t-Distributed Stochastic Neighbor Embedding&#xff09;是一种非常强大且流行的降维算法。它被广泛应用于数据可视化、特征提取等任务中。然而&#xff0c;与其他算法一样&#xff0c;t-SN…

Python酷库之旅-第三方库Pandas(041)

目录 一、用法精讲 136、pandas.Series.ne方法 136-1、语法 136-2、参数 136-3、功能 136-4、返回值 136-5、说明 136-6、用法 136-6-1、数据准备 136-6-2、代码示例 136-6-3、结果输出 137、pandas.Series.eq方法 137-1、语法 137-2、参数 137-3、功能 137-4、…