Z 字形变换(Python)
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
之后,输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
示例 1:
输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”
示例 2:
输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”
示例 3:
输入:s = “A”, numRows = 1
输出:“A”
最开始看到,“???什么东西?Z ??”。仔细看下,其实就是找规律。
- 第 0 行,k * 2 * (n - 1)
- 第 n-1 行,k * 2 * (n - 1) + (n - 1)
- 内部 i 行,k * 2 * (n - 1) + i 以及(k + 1) * 2 * (n - 1) - i
思路一:逐行遍历,首先访问 行 0 中的所有字符,接着访问 行 1,然后 行 2,依此类推…
def convert(s, num):if num == 1:return snleng = 2 * (num - 1) # nleng 是判断、添加元素的关键news = ""for i in range(num): # 逐行遍历j = 0while j + i < len(s):news += s[j+i] if i not in [0,num-1] and j + nleng - i < len(s): # 中间行news += s[j + nleng-i] # (k + 1) * 2 * (n - 1) - i j += nlengreturn news
思路二:从左到右迭代 s,将每个字符添加到合适的行。使用当前行和当前方向这两个变量对合适的行进行跟踪。注意第0行、第n-1行时,方向的改变。
def convert(s, num):if num == 1:return sret, i, k = ['' for i in range(num)], 0, 1 # i:行数,k:方向和步长for el in s:ret[i] += eli += kif i in [0, num-1]: # 方向改变k = -k return ''.join(ret)
Z 字形变换(Python)相关推荐
- leetcode6 Z字形变换 python
题目: 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R之后从左到右"PAHNAPLSIIG ...
- LeeTCode:6. Z 字形变换 python实现
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: 方法一: 为一个 类似 ...
- LeetCode Algorithm 6. Z 字形变换
6. Z 字形变换 Ideas 这题的思路其实只要想到了就很简单,首先创建一个numRows行的矩阵,每一行用来存Z字变换后每一行的字符,然后遍历字符串s,其实就是从上往下然后从下往上填充到每一行,所 ...
- Z 字形变换 C++实现 java实现 leetcode系列(六)
Z 字形变换 java实现 C++实现 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...
- java z+_Java Z 字形变换
– 题目:Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: ...
- 【LeetCode】6.Z 字形变换
6.Z 字形变换 我的思路貌似没有第二家,不过我懒得解释了. #include <string> #include <iostream> using namespace std ...
- leetcode题库:6. Z字形变换
题目: /**题目:6. Z字形变换(题目地址:https://leetcode-cn.com/problems/zigzag-conversion/description/) * 将字符串 &qu ...
- [模拟|字符串] leetcode 6 Z字形变换
[模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...
- leetcode第六题Z字形变换心得记录
算法学习之路-坚持走下去 Z字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行 ...
- LeetCode——6. Z 字形变换
6. Z 字形变换(中等难度) 题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING ...
最新文章
- 第四章:通过:driver.getAttribute(value); 获取value的值
- P3389 【模板】高斯消元法
- react中的状态机_在基于状态图的状态机上使用React的模式
- 【转】04.Dicom 学习笔记-DICOM C-Move 消息服务
- MySQL04WHERE关键字
- Node.js入门以及第一个helloworld程序.
- bat 取得服务列表_临汾进出口经营者备案,查看详情_共勤外贸服务
- Python使用freetype渲染显示阿拉伯语
- Maven异常:Could not find artifact
- rabbitmq高并发RPC调用,你Get到了吗?
- script什么意思中文翻译成,script的中文意思是什么
- maven - filtering标签
- 统计年鉴 excel
- 端云协同,打造更易用的AI计算平台
- EVE在Win10上安装
- 北邮计算机学院acm,计算机学院学生在2018年ACM-ICPC中国大学生程序设计竞赛中喜获佳绩...
- python中 “按位与,或,异或”与C语言的不同
- ZigBee无线温度传感网络设计
- win10计算机管理器在哪,Windows10开启服务管理器图文教程|Win10系统服务管理器在哪...
- 无法打开此计算机的组策略,无法运行gpedit.msc(组策略)的解决