python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形

Z字形变换

题目

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

比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:

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

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

示例 1:

输入: s = “LEETCODEISHIRING”, numRows = 3

输出: “LCIRETOESIIGEDHN”

示例 2:

输入: s = “LEETCODEISHIRING”, numRows = 4

输出: “LDREOEIIECIHNTSG”

解释:

解题思路

题目理解:

字符串 s 是以 Z 字形为顺序存储的字符串,目标是按行打印。

设 numRows 行字符串分别为 s

1

,s

2

,……,s

n

,则容易发现:按顺序遍历字符串 s 时,每个字符 c 在 Z 字形中对应的 行索引 先从 s

1

增大至 s

n

,再从 s

n

减小至 s

1

…… ,如此反复。

因此,解决方案为:模拟这个行索引的变化,在遍历 s 中把每个字符填到正确的行 res[ i ] 。

算法流程:

按顺序遍历字符串 s;

res[ i ] += c: 把每个字符 c 填入对应行 s

i

i += flag: 更新当前字符 c 对应的行索引;

flag = - flag: 在达到 Z 字形转折点时,执行反向。

妙用 flag

代码实现如下:

class Solution:

def convert(self, s: str, numRows: int) -> str:

if numRows == 1: return s

res = [''] * numRows# res = ["" for _ in range(numRows)]

k,flag = 1,-1

while s:

if k in [1,numRows]:

flag = -flag

res[k-1] += s[0]

s = s[1:]

k += flag

return ''.join(res)

class Solution:

def convert(self, s: str, numRows: int) -> str:

if numRows < 2: return s

res = ["" for _ in range(numRows)]

i, flag = 0, -1

for c in s:

res[i] += c

if i == 0 or i == numRows - 1: flag = -flag

i += flag

return "".join(res)

X字形变换

题目来自于2020校招华为机试题

题目

给定一个仅由大写字母组成的字符串以及一个指定的奇列数,按从左到右,从上到下的顺序将给定的字符串以X字形排列成指定的列数。

例如,给定字符串为EVERYTHINGGOESWELL,指定列数为3,则大X字形排列为:

然后,从上到下逐列读取上面的大X字形排列,产生一个新的字符串,如读取上面的大X字形排列可得目标字符串为:ERHGEEETNOWLVYIGSL

解题思路

题目理解

此题跟 Z 字形变换同理,区别在于,Z 字形变换有顺序性,而 X 字形变换具有对称性,不适合遍历字符串。

解决方案依旧是模拟行索引的变化,遍历 strs 中的每个字符填到正确的行 res[ i ]。

算法流程:

res[ k ] += strs[0] :把字符strs[ 0 ] 填入对应的第 k 列,并扔掉strs[ 0 ]

res[n-k-1] += strs[0] :k 没有走到 mid 位置,将下一个字符填入对应的第 n-k-1 列

flag = -flag :前进到起始位置 k=0 或中间位置 mid ,执行反向

strs = 'EVERYTHINGGOESWELL'# 给定的字符串

n = 3 # 指定列数

res = [''] * n

k,flag = 0,-1 # 初始位置,前进方向

mid = (n-1) // 2

while strs:

res[k] += strs[0]

strs = strs[1:]

# 如果字符串空了

if not strs: break

# 如果没有走到中点mid

if k != mid:

res[n-k-1] += strs[0]

strs = strs[1:]

# 改变前进方向

if k == mid or k == 0:

flag = -flag

k += flag

print(''.join(res))

另外

除了

Z

字形变换和

X

字形变换外,还可以有

V

字形变换、

N

字形变换等等

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

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

相关文章

蓝绿发布,灰度发布及滚动发布

【README】 本文转自&#xff1a;理解蓝绿发布、灰度发布和滚动发布_Jitwxs的博客-CSDN博客_蓝绿发布和灰度发布的区别目前绝大多数公司的业务系统都是集群化部署&#xff0c;那么在新版本上线时&#xff0c;保证平滑稳定&#xff0c;尽量减少对线上用户的影响&#xff0c;就显…

Oracle入门(七)之表空间

表空间表空间是数据库的逻辑划分&#xff0c;一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表&#xff0c; 所以称作表空间。 Oracle数据库中至少存在一个表空间&#xff0c;即SYSTEM的表空间。 &#xff08;1&#xff09;创建表空…

让我们Core在一起:ASP.NET Core amp; .NET Core

Microsoft .NET 自 2002 年发行 v1.0 以来&#xff0c;已经过了近 14 个年头&#xff0c;在这 14 年里面&#xff0c;.NET 日渐成熟并成为 Microsoft 的重要开发平台之一&#xff0c;只要是在 Windows 平台上的相关应用&#xff0c;几乎都可以使用 .NET 以及所属的 C# 及 VB 语…

python菱形画法解释_用Python画棱形

定义一个函数画棱形def diamond(height):"""Return a string resembling a diamond of specified height (measured in lines).height must be an even integer."""L[]lines/bs\\for i in range(1,int(height/21)):aline.rjust(i,s).ljust(i*2,b…

3.操作系统接口与系统调用

【README】 本文内容总结自 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 【1】操作系统接口 0&#xff09;用户使用计算机3种方式&#xff1a; 命令行&#xff1b; 命令行执行 hello world图形界面&#xff1b;如计算机磁盘浏览器…

Oracle入门(十二A)之数据类型

Oracle数据类型 &#xff08;1&#xff09;char&#xff08;2&#xff09;varchar2&#xff08;3&#xff09;Number&#xff08;4&#xff09;Date&#xff08;5&#xff09;Blob、Clob、Nclob

在Linux以及Mac OS X启用F#

随着.NET Core的推进&#xff0c;如今我们在Linux和Mac OS X平台上也可以和原先Windows平台之下一样运行F#程序。Microsoft的F#项目经理David Stephens先生在Build 2016大会上向大家介绍了如何在Linux以及Mac OS X启用F#。 第一步需要安装.NET Core工具。这一步对于C#和F#来说是…

flask执行python脚本_如何在flask后端运行python脚本?

我有一个小瓶子应用程序&#xff0c;它接受用户输入并返回一些文本。在这里&#xff0c;用户输入被输入到另一个python脚本&#xff0c;比如temp.py&#xff0c;这个temp.py将返回一个应该返回给用户的值。例如&#xff1a;烧瓶.pyfrom flask import Flask, render_template, r…

4.操作系统历史

【README】 本文内容总结自 B站 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 【1】IBM7094 批处理操作系统&#xff1a; 一个job 一个job的顺序执行&#xff1b; 【2】 IBM OS360 1&#xff09; 多道程序&#xff1a; 程序1 程…

Oracle入门(三)之连接与登录

一、启动Oracle服务 #cmd net start oracleserviceORCL net stop oracleserviceORCL二、进入SQLPLUS &#xff08;1&#xff09;没登录进入SQL C:\Users\mk>sqlplus /nolog #没有提示 &#xff08;2&#xff09;登录进入SQL C:\Users\mk>sqlplus C:\Users\mk>用户名:…

玩玩Xamarin Evolve 2016带来的新特性(三)-Xamarin Workbooks

编者语&#xff1a;五一祝各位劳动者快乐。今天是该系列文章的最后一篇&#xff0c;当然Evolve 2016还有很多很多的内容&#xff0c;但是我觉得iOS Simulator(for Windows), Xamarin Previewer ,以及Xamarin Workbooks是最为关键的三个技术&#xff0c;也是国内开发者比较关注的…

springboot单测用例

【README】 本文阐述了 springboot 单测开发方式&#xff1b; 【1】引入springboot 单测制品库&#xff1b; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.3.…

车联网 python_利用百度车联网提供的天气查询接口用python查询天气信息

(1)程序查询结果图(图中较下的图是百度查询天气的结果)(2)http://developer.baidu.com/map/carapi-7.htm 百度车联网接口说明中有天气查询的接口&#xff0c;目前是免费提供的(一天可以查询5000次)下表是接口返回的json数据。(表中##及后内容是为了方便的查看数据填写的){‘dat…

Oracle入门(六)之用户操作

定义&#xff1a;也叫方案&#xff0c;是一组逻辑对象的所有者。 验证方式&#xff1a;数据库验证和操作系统验证。 表空间和临时表空间&#xff1a;表空间为用户创建数据对象的存储表空间&#xff1b;临时表空间用于创建临时段。空间分配&#xff1a;表空间中&#xff0c;必须…

使用VS2015进行C++开发的6个主要原因

在今年的Build大会上&#xff0c;进行了“将你的C代码转移至VS2015的6个原因”的演讲&#xff0c;其中探讨了VS2015中对于C开发者们更有用的新功能。自从它在2015年七月的第一次发布后&#xff0c;VS2015一直在完善&#xff0c;并且比起对它的启动状态而言&#xff0c;它的两个…

Oracle入门(八)之权限

定义&#xff1a;控制用户在数据库中所能进行的操作权限 分类&#xff1a;系统权限和对象权限 一、系统权限 系统权限(system Privilege)&#xff1a;允许执行一组特定的命令CREATE SESSION 创建会话CREATE/DROP USER 创建用户CREATE/DROP VIEW 创建视图CREATE/DROP SEQUENCE 创…

window批处理命令启动nginx

【README】 本文阐述了编写window批处理命令启动&#xff0c;停止nginx&#xff1b; 【1】启动nginx 文件&#xff1a; nginx-start.bat d: cd d:\temp\nginx nginx -s stop taskkill /im nginx.exe /f ping 127.0.0.1 -n 3 -w 1000 > nul start nginx pause 补充&#…

arm芯片厂家排名_国产芯片目前至少有10种,其中有3种,达到了世界顶尖水平

说起来&#xff0c;中国芯的发展史称得上是一部磨难史&#xff0c;因为技术、设备、人才等都被西方国家封锁&#xff0c;就是为了让中国这个大市场巨额进口芯片。但这些年&#xff0c;中国的企业也没有闲着&#xff0c;可以说把世界上的主流的芯片架构尝试了个遍&#xff0c;就…

Oracle入门(十)之概要文件

一、概要文件作用 &#xff08;1&#xff09;功能控制用户对系统和数据库资源的使用&#xff0c;保证系统正常运行&#xff0c;防止用户消耗大量资源造成的系统性能下降。 &#xff08;2&#xff09;方法设置预定义资源参数。这些参数包含在概要文件中&#xff0c;如果没有为用…

ASP.NET跨平台实践:无需安装Mono的Jexus“独立版”

在Linux上运行ASP.NET网站或webapi的传统步骤一般是先安装libgdiplus&#xff0c;再安装mono&#xff0c;然后安装Jexus。在这个步骤中&#xff0c;安装Jexus非常简单&#xff0c;而安装mono就相对的比较费时费力了。 为了克服务安装Mono这个过程的繁琐&#xff0c;方便大家把A…