LeetCode Q6-Q10练习笔记 (Python3)

Q6 Z字形变换 ZigZag Conversion

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。

这道题目刚开始真是完全没看懂,感觉更像是倒N字形,看明白了之后发现确实按照字符的排序还是Z字形。但其实什么形状的并不是很重要,题目给出的排列是很偏图形化的,然而最后需要我们输出的却是一条字符串,所以可以暂时忽略掉这个图形化的问题。也正是看了这个图,我第一时间想到了用二维数组来写这道题,最后看了别的大佬的答案才有所悔悟,
从表面上看这道题是一个Z字形的排列,实际上它并没有在空间上实际形成Z字形,通过最后的结论来看,只是将字符串从上往下再从下往上如此反复的排列,再从横向取新字符串
以下是我的理解:

  1. 先声明一个大小为numRows的字符串数组。这里犯了一个错,python中一维数组的声明需要用到类似[""]*numRows的声明,不然会出现超出列表长度的问题。
  2. 根据循环,先是将原字符串ssol[0]sol[numRows-1]一直往下输入,直到sol[numRows-1],这时候将输入的方向颠倒。这里用到了一个增量inc,本身为1,从0到numRows-1时逐一增加,直到numRows-1开始inc*=-1使得逐一递减直到0,如此往复。
  3. 若第二步遍历完成了,直接让sol[0]sol[numRows-1]加到一个字符串就好了

整个代码里面最核心的就是python字符串相加的这个功能,可以很简洁地用+=来实现。

class Solution:
    def convert(self, s, numRows):
        index=0
	   	sol=[""]*numRows 
	   	#sol=[] #错误
	    inc=1
	    final=""
	    for i in range(len(s)):
	        sol[index]+=s[i]
	        if numRows>1:
	            index+=inc
	            if index== 0 or index==numRows-1:
	                inc*=-1
	    for j in range(numRows):
	        final+=sol[j]
	    return final

Q7 整数反转 Reverse Interger

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

难得看到自己马上做完了一道,果然还是道Easy难度题:

class Solution:
    def reverse(self, x: int) -
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值