NO.6 Z字形变换(中等)
题目描述:将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
P A H N A P L S I I G Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
示例如下,输入:s = “PAYPALISHIRING”, numRows = 4
输出:”PAHNAPLSIIGYIR”,解释如下
P I N A L S I G Y A H R P I
这个题目的核心在我看来就是找规律,找到规律了你就成功做出来了,先上代码,详细注释在代码里
class Solution:
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
news=[]
n=numRows
k=2*n-2
if n==1:
return s
for i in range(numRows):
for j in range(i,len(s),k):
if j%k==k-i or j%k==i:
"""
自己摸索出来的一个规律,j是第j个字符,i代表第i行,k=2*n-2,n代表要求的行数,就是说第j个字符,顺序从0开始,如果除以k的余数等于i就代表在第i行,因为这个规律只适合首尾行,中间的其他行还有其他数字,所以新增了另外一个规律,也是找的,我一开始j是每次按1遍历的,所以超时了,后面我改成了如上所示,每次按k递加,不仅顺利通过,还打败了接近70%的人,但需要注意的是按k增加在首尾行行的通,中间还需要加其他字符,如下代码所示,总而言之找对规律就行
"""
news.append(s[j])
if i!=0 and i!=n-1 and j-2*i+k<len(s):
news.append(s[j-2*i+k])
snew=''.join(news)
return snew
NO.7 反转整数(简单)
题目描述:给定一个 32 位有符号整数,将整数中的数字进行反转。假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
其实这个题目正如题目描述一样非常简单,没想到我写的居然超过了98.4%的人,amazing,代码如下:
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x>=0:
s=str(x)
news=s[::-1]
newint=int(news)
if newint<-2**31 or newint>2**31-1:
return 0
return newint
else:
s=str(-x)
news=s[::-1]
newint=int(news)
if -newint<-2**31 or -newint>2**31-1:
return 0
return -newint