首页 > 其他分享 >N 字形变换

N 字形变换

时间:2023-04-15 17:44:33浏览次数:26  
标签:字形 下以 示例 变换 res numRows step2 step1

题目描述

难度中等

将一个给定字符串 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

解题步骤

时间复杂度和空间复杂度都是\(O(n)\)。

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        # 定义两个步伐长度step1 = 2 * i,step2 = 2 * (numRows-1) - step1
        # 通过观察发现规律,第i行在第i个字符的前提下以step2, step1的步伐交替前进
        # 比如示例1的第一行在P的情况下以4,0,第二行在A的情况下以2,2,第三行在Y的情况下以0,4交替前进
        # 其中当步伐为0时不用记录
        n = len(s)
        if numRows == 1:
            return s
        res = [None] * n
        k = 0
        for i in range(numRows):
            step1 = 2 * i
            step2 = 2 * (numRows-1) - step1
            j = i
            flag = 1
            while j < n:
                if flag == 1:
                    if step2 != 0:
                        res[k] = s[j]
                        k += 1
                    j = j + step2
                else:
                    if step1 != 0:
                        res[k] = s[j]
                        k += 1
                    j = j + step1
                flag = -flag
        return "".join(res)

标签:字形,下以,示例,变换,res,numRows,step2,step1
From: https://www.cnblogs.com/crazypigf/p/17321525.html

相关文章

  • AutoCAD.NET:矩阵和变换–矩阵信息
      [CommandMethod("Matrix_PrintOut")]publicstaticvoidMatrix_PrintOut(){Editored=MgdAcApplication.DocumentManager.MdiActiveDocument.Editor;Databasedb=HostApplicationServices.WorkingDatabase;try{Matrix3didentityM......
  • 30.图像距离变换
    图像中两个像素之间的距离有多种定义方式,图像处理中常用的距离有欧式距离、街区距离和棋盘距离,本节中将重点介绍这三种距离的定义方式,以及如何利用两个像素间的距离来描述一幅图像。1、欧式距离,两个像素点之间的直线距离。与直角坐标系中两点之间的直线距离求取方式相同,分别......
  • 变换求和顺序
    先看两个基本的例子:\[\sum_{i=1}^n\sum_{j=1}^ma_{i,j}=\sum_{j=1}^m\sum_{i=1}^na_{i,j}\]\[\sum_{i=1}^n\sum_{j=1}^ia_{i,j}=\sum_{j=1}^n\sum_{i=j}^na_{i,j}\]第一个式子是单标限定,即枚举的\(i,j\)的集合互相不干扰。例如:\(i\in[1,n],j\in[1,m]\)那么变换......
  • 2023.4.7【模板】快速沃尔什变换FWT
    2023.4.7【模板】快速沃尔什变换FWT题目概述给定长度为\(2^n\)两个序列\(A,B\),设\(C_i=\sum_{j\oplusk=i}A_j\timesB_k\)分别当\(\oplus\)是or,and,xor时求出\(C\)我们通常将这个操作,叫做“位运算卷积”,因为它的卷积是按照位运算法则“卷”起来的。算法流程或......
  • opencv-python 4.14. 霍夫圆变换
    基础知识铺垫通过检索相关资料,学习到了霍夫圆检测的一点点皮毛知识,它的基本内容是认为图像上任何一个非零像素点,都有可能是一个潜在圆形上的一点。通过投票计算,生成累计坐标平面,然后在设置一个累计权重,去定位圆。在笛卡尔坐标系中圆的方程为(x-a)^2+(y-b)^2=r^2,其中(a,b......
  • opencv-python 4.13. 霍夫线变换
    前言霍夫变换是一种特征检测(featureextraction),被广泛应用在图像分析(imageanalysis)、计算机视觉(computervision)以及数位影像处理(digitalimageprocessing)。霍夫变换(HoughTransform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程......
  • 正激变换器
    https://blog.csdn.net/qq_42078934/article/details/127060745拓扑结构分析:输入电压Vi输出电压Vo开关组件S变压器T原边线圈圈数Np副边线圈圈数Ns整流理想二极管D1,D2滤波电容C   正激变换器电压转换公式:  D=占空比T=周期n=变压器匝比 ......
  • [oeasy]python0124_Code_page_437_IBM_5150_点阵式字形码_显示器效果
    字符显示器回忆上次内容简体和繁体的汉字字符数量都超级大感谢王选和陈堃銶等前辈发明了激光照排技术中文排版从此使用上了gb2312编码 ​ 添加图片注释,不超过140字(可选) 纸张之外显示器是更先进的输出设备 计算机是......
  • 【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性
    【论文速递】MMM2020-电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能【论文原文】:ANewLocalTransformationModuleforFew-shotSegmentation【作者信息】:YuweiYang,FanmanMeng,HongliangLi,QingboWu,XiaolongXuandShuaiChen获取地址:https://arxi......
  • 【ACM数论】和式变换技术,也许是最好的讲解之一
    在做数论题时,往往需要进行和式变换,然后变换成我们可以处理的和式,再针对和式做筛法、整除分块等操作。本文将介绍一些常见的和式变换技术。以下出现的概念大部分为个人总结,未必是学术界/竞赛界的统一说法,有不严谨的地方请谅解。......