俺的力扣之旅01

1、题目:Z字变换(其实是N字变换吧),按照给定行数,把指定字符串从上到下、从左到右进行排列。

例子:"PAYPALISHIRING" 行数为3

结果:

P   A   H   N
A P L S I I G
Y   I   R

2、解题思路:

my:一开始想着定义n个数组,n等于输出的行数,就是按行去存储字符。问题在于怎么求得每行的字符,试图找出每行字符的下标之间的联系,无果哈哈哈哈。在这里审题的时候还犯了一个错误,我以为所有输出的时候要像上面一样,中间要有空格隔开,其实并没有,只是字符串顺序的改变。

别的程序员1号:找出每行字符下标的关系,以4行为例

0     6      12        18
1   5 7   11 13    17
2 4   8 10   14 16
3     9      15

对k=i%(2n-2)进行判断:

                k<=n-1,s[i]属于第k行

                k>n-1,s[i]属于第2n-2-k行 

最后把每一行拼接起来!

别的程序员2号:按照这个N字型路线来存字符,也是一开始就定义n个数组,在循环里面对每一行加入字符串,详细代码:flag就是用来判断什么时候要转变遍历方向的,妙啊!

class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows==1:
            return s
        rev=["" for _ in range(numRows)]
        i,flag=0,-1
        for x in s:
            rev[i]+=x
            if i==0 or i==numRows-1:
                flag=-flag
            i+=flag
        return "".join(rev) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值