zoukankan      html  css  js  c++  java
  • 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

    答案:

    #将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列
    #第一行与最后一行的步长一样,所以分三步,第一行先根据步长计 算出来,
    # 最后一行根据步长计算出来,中间的一行或二行分开计算
    #最后把行数连接起来
    class Solution:
    def convert(self,s,nums):
    if nums == 1:
    return s
    #步长
    steps = nums * 2 - 2
    an =''
    an += s[0::steps]#第一行
    for i in range(1,nums-1):
    interstep = steps - 2*i#中间行步长
    j = i
    while j < len(s) - steps:
    an += s[j] + s[j+interstep]
    j += steps
    if j < len(s):#补充中间行的倒数第二个元素
    an +=s[j]
    if j+interstep < len(s):
    an += s[j+interstep]#补充中间行的倒数第一个元素

    an += s[nums-1::steps]#最后一行
    return an

    str = "LEETCODEISHIRING"
    numRows = 3
    str = "LEETCODEISHIRING"
    numRows = 4
    s = Solution()
    v = s.convert(str,numRows)
    print(v)


    第二种方法:

    ####Z字形变换####
    #考察点,注意字母的排序方式,从上到下,
    ##题目解析,1 有多少行就初始化list的元素有多少个
    #从上往下走,step为1,表示正方向,在最后一行,字符从下往上走,step=-1,其中正负号可以理解为不同方向
    ###
    '''
    L C
    E↓ T↗
    E↓
    '''
    class solution:
    def convert(self,s,nrows):
    if nrows==1:
    return s
    ##初始化:
    L=['']*nrows
    index,step=0,1
    for x in s:
    L[index]+=x
    if index==0:
    step=1
    elif index==nrows-1:
    step=-1
    index+=step
    return ''.join(L)
    a=solution()
    a.convert('LEETCODEISHIRING',4)

  • 相关阅读:
    Luogu P2016 战略游戏(树形DP)
    Luogu P2486 染色(树链剖分+线段树)
    Luogu P3178 树上操作(树链剖分+线段树)
    Luogu P2590 树的统计(树链剖分+线段树)
    Luogu P2146 软件包管理器(树链剖分+线段树)
    获得spring
    网卡绑定多个ip
    描述01-配置文件咋整
    进程查看
    端口查看,进程杀死
  • 原文地址:https://www.cnblogs.com/zbligang/p/10411583.html
Copyright © 2011-2022 走看看