1、两数之和

描述:

 

 

解题思路:建立一个字典模拟Hash映射,记录每个元素的索引值,并每隔通过判断(target-nums[i])是否存在于字段中来进行判断。时间复杂度O(n),空间复杂度O(n)

代码:

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dict_a = {}
        for i in range(len(nums)):
            if (target-nums[i]) not in dict_a:
                dict_a[nums[i]] = i
            else:
                return i,dict_a[target-nums[i]]

 

2、整数反转

 

 解题思路:通过不断与10取商取余数的方式,获取最后一位并重新反转。需要注意的是,有些大数会在取反之后溢出,故需要做判断(python对与整数有大小限制,但是在python3中,整数理论上可以存储任意大的数,只要不超过内存)。时间复杂度O(n),空间复杂度O(1)。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        res = 0
        s = abs(x)
        while s!= 0:
            tmp = s%10
            last = res
            res = res*10 + tmp
            if res>2**31-1:  #判断溢出
                return 0
            s = s/10
        return res if x>0 else (-1)*res

 

3、回文数

 

 解题思路:与上题类似,通过与10取商和取余的方式,将整数进行反转,负数一定不是,0一定是。时间复杂度O(n),空间复杂度O(1)。

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x<0 :
            return False
        s = x
        res = 0
        while s !=0:
            tmp = s%10
            res = res*10 + tmp
            s = s/10
        if x == res:
            return True
        else:
            return False

 

 posted on 2021-12-05 17:39  佩剑君子  阅读(37)  评论(0编辑  收藏  举报