zoukankan      html  css  js  c++  java
  • Leetcode_06【Z字形变换】——【难度:中】

    目录:

    • 题目
    • 脚本及注释
    • 脚本逻辑

    题目:

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

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

    L C I R
    E T O E S I I G
    E D H N
    之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

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

    string convert(string s, int numRows);
    示例 1:

    输入: s = "LEETCODEISHIRING", numRows = 3
    输出: "LCIRETOESIIGEDHN"
    示例 2:

    输入: s = "LEETCODEISHIRING", numRows = 4
    输出: "LDREOEIIECIHNTSG"
    解释:

    L D R
    E O E I I
    E C I H N
    T S G


    脚本及注释:【耗时:56ms】

    class Solution:
        def convert(self, s: str, numRows: int) -> str:
            str1 = ""
            len1 = len(s)
            kk = 0
            if numRows == 1:
                return(s)
            n1 = (numRows - 1) * 2
            if numRows == 2:
                for i in range(0,len1,2):
                    str1 += s[i]
                for j in range(1,len1,2):
                    str1 += s[j]
                return(str1)
            else:
                for i in range(numRows):
                    j = i
                    while j+1 <= len1:
                        str1 += s[j]
                        j += 2*(numRows - i -1)
                        #if j+1 <= len1:
                        #    str1 += s[j]
                        bb = n1 - 2*(numRows - i -1)
                        if bb == 0:
                            if j+1 <= len1:
                                str1 += s[j]
                                j += 2*(numRows - i -1)
                        elif bb == n1:
                            j += n1
                        else:
                            #print(bb,j)
                            if j+1 <= len1:
                                str1 += s[j]
                                j += bb
            return(str1)

    脚本逻辑:

    1. 此题属于查找规律类,通过行数可知存在以下规律:
      1. 第一行第一个和第二个之间隔着行数(numRows-2)* 2 +1(设为m个)字符;第二行第一个、第二个和第三个存在如下规则:第一个为给定字符串s的第二个;第二行第二个与第二行第一个隔着 m - 2个字符;第二行第二个位置和第二行第三个位置隔着m - (m-2)=2个字符 
    2. 除首尾两行外,中间行的字符间隔存在着上面的规律
    3. 理解此规律后,再细读脚本即可
  • 相关阅读:
    设置Kali Linux虚拟机连接网络
    修改Kali Linux终端主题
    Kali Linux修改桌面默认图标
    Metasploit技巧命令支持tips
    修改Kali Linux终端历史记录大小
    ListView 实现进度条显示
    Delphi 10.3.2 社区版的安装
    VMWare 下安装 Windows XP
    重新认识 Delphi
    VMWare 下安装 MSDN版 MS-DOS 6.22
  • 原文地址:https://www.cnblogs.com/mailong/p/12227357.html
Copyright © 2011-2022 走看看