力扣题(6) —— z字形变换

2023-12-04 08:58
文章标签 变换 字形 力扣题

本文主要是介绍力扣题(6) —— z字形变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion

做法一

一开始真的不知道怎么做,那就只好把问题写下来找规律了,为了规律可见,我们将字符串的索引进行排序。如图:在这里插入图片描述
我的建议是找到规律后自己实现一下代码,说实话我自己的代码也写得很乱(毕竟是小白)

s = input()numRows = int(input())def convert(s, numRows):T = (numRows-1) * 2 # 周期if T == 0: # 此时 numRows == 1,其实就不用变化return selse:res = ''count = 0 # 表示是第几行while count < numRows:index = count # index 表示索引flag = Truewhile flag:if count == 0 or count == numRows-1: # 第 0 行和最后一行不用考虑 V 字的右边if index < len(s): # 判断是否越界res += s[index]index += Telse:break# 剩下的条件语句,都是考虑可能出现的情况elif (index - count*2) > 0 and index < len(s) :res += s[index-count*2] + s[index]index += Telif  0 < (index - count*2) < len(s) and index >= len(s):res += s[index-count*2]index += Telif (index - count) == 0 and count < len(s): # 避免越界,比如 s = 'A', numRows = 3res += s[count]index += Telse:flag = Falsecount += 1return resprint(convert(s, numRows))

做法二

字符串是怎么变化的我们就怎么解决
还是以索引为例(其实直接用字符串也可以,因为不用刻意找规律)
在这里插入图片描述
不过要把这样的思路转换成代码还是比前一个解法要困难一点的。

s = input()numRows = int(input())def convert(s, numRows):if numRows == 1:return s# 建立一个二维数组res_list = []for i in range(numRows):res_list.append([])# 先把第一个字符加入到list1res_list[0].append(s[0])res = ""index = 1flag = 1 # 因为有list1 到 list2 到 list3,到 list2 这样的规律,我们就立一个 flag 来判断是正序还是逆序。我用 flag = 1 表示正序。count = 1 # 表示 list几while index < len(s):if flag == 1:res_list[count].append(s[index])if index % (numRows - 1) == 0:index += 1flag = -flag count -= 1'''何时从正序到逆序(或是从逆序到正序)我们又是找规律,发现当 index 是 (numrows-1) 的倍数时转换。这也是把index = 0 特别讨论的原因,0 % 任何数 == 0,但实际上index == 0 顺序并不改变'''else:index += 1count += 1else:res_list[count].append(s[index])if index % (numRows - 1) == 0:index += 1flag = -flagcount += 1else:index += 1count -= 1for i in res_list:for j in i:res += jreturn resprint(convert(s, numRows))

这篇关于力扣题(6) —— z字形变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/452873

相关文章

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

【数字信号处理】一文讲清FFT(快速傅里叶变换)

目录 快速傅里叶变换(Fast Fourier Transform,FFT)FFT的背景快速傅里叶变换(Fast Fourier Transform,FFT)DFT的数学表达实际计算重要性和应用频谱泄露、频谱混叠奈奎斯特采样定理参考链接 快速傅里叶变换(Fast Fourier Transform,FFT) FFT的背景 1、为什么要时域→频域频率?50Hz+频率120Hz

傅里叶变换家族

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

齐次变换矩阵的原理与应用

齐次变换矩阵的原理与应用 通过齐次变换矩阵,可以描述机械臂末端执行器(法兰)在三维空间中的平移和旋转操作。该矩阵结合了旋转和平移信息,用于坐标变换。 1. 齐次变换矩阵的基本形式 一个齐次变换矩阵 T是一个 4x4 矩阵,表示刚体的旋转和平移: T = [ R t 0 1 ] = [ r 11 r 12 r 13 x r 21 r 22 r 23 y r 31 r 32 r 33 z 0

MATLAB分析图像的离散余弦变换(DCT)

1. MATLAB的介绍以及所需函数的说明:  1.1 MATLAB  MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设

PyTorch Demo-4 : 数据变换Transforms

Transforms的函数有很多,每次都是直接copy已有的代码,但是不知道具体是什么样子,在这里记录一下 Transforms常用方法的具体说明参考链接1,链接2,或者官方文档。 原始图像采用图像处理经典的Lena: Python代码 from PIL import Imagefrom torchvision import transforms as tfimport ma

【Get深一度】小波变换通俗解释 -算法与数学之美

链接:http://www.zhihu.com/question/22864189/answer/40772083 文章推荐人:杨晓东 从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。     下面就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东

【Get深一度】信号处理(二)——傅里叶变换与傅里叶级数的区别与联系

1.傅里叶级数和傅里叶变换:  傅里叶级数对周期性现象做数学上的分析 傅里叶变换可以看作傅里叶级数的极限形式,也可以看作是对周期现象进行数学上的分析。 除此之外,傅里叶变换还是处理信号领域的一种很重要的算法。要想理解傅里叶变换算法的内涵,首先要了解傅里叶原理的内涵。 傅里叶原理表明:对于任何连续测量的数字信号,都可以用不同频率的正弦波信号的无限叠加来表示。     傅里叶变

【C】快速傅里叶变换(FFT)讲解及实现

引言基2FFT 1.引言 人类的求知欲是永无止境的,自1965年 T. W. Cooley 和 J. W. Tuky 在《Math. Computation, Vol, 19, 1965》发表了著名的《 An algorithm for the machine calculation of complex Fourier series 》,人们对 有关傅里叶变换的改进和创新就从未止步。1

5.8幂律变换

目录 示例代码1 运行结果1 示例代码2 运行结果2 补充示例原理 示例:使用cv::pow进行图像处理 代码 运行结果 ​编辑 补充 实验代码3 运行结果3​编辑 在OpenCV中,幂律变换(Power Law Transformations)是一种常用的图像增强技术,尤其适用于调整图像的对比度。这种变换通过应用一个幂函数来调整图像的亮度,使得图像的细节更加明显