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