给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = {
}
for index,num in enumerate(nums):
if target - num in hashmap:
return [hashmap[target-num],index]
hashmap[num] = index
解题思路:
1.字典性质
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
实例:
>>>dict = {
'IGTOP':'theshy','IGMID':'Rookie','IGJUG':'Ning'}
>>>print(dict['IGTOP'])
theshy
2.内置函数 enumerate()
enumerate是Python的一个内置函数。你应该充分利用它通过循环迭代自动生成的索引变量。
>>>nums = [2,7,11,15]
>>>list(enumerate(nums))
[(0,2),(1,7),(2,11),(3,15)]
对于输入 list()中的每个 enumerate()迭代器元素,迭代器会返回一个形式为 (index,element)
的元组作为list的元素。在典型的for-in循环中,你可以利用Python的数据结构解包功能来充分利用这一点特性:
for index,element in enumerate(nums):
#...
索引值默认从0开始,但也可以将其设置为任何整数。
>>>nums = [2,7,11,15]
>>>list(enumerate(nums,1))
[(1,2),(2,7),(3,11),(4,15)]
在上面的例子中,我将函数调用改为 enumerate(names, 1)
,后面的参数1就是本次循环的起始索引,替换默认的0.
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
题解代码:
class Solution:
def reverse(self, x: int) -> int:
strr = str(abs(x))
strr = strr[::-1]
if x < 0:
strr = '-'+strr
x = int(strr)
if x<-2**31 or x>2**31-1:
return 0
else:
return x
解题思路:
1.去符号后字符串切片翻转
去符号,用内置函数abs()
strr = str(abs(x))
类型转换后进行切片翻转操作:
strr = strr[::-1]
2.判数值符号
if x < 0:
strr = '-'+strr
3.判溢出
x = int(strr)
if x<-2**31 or x>2**31-1:
return 0
else:
return x