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

Pages: 1 2 3 4 5 6