1. 两数之和

题目链接

题目思路

定义一个idxmap,用于存储遍历到的每一个数所对应的下标。

当遍历到下标为$j$的数时,先查找在idx中是否存在target - nums[j]
如果存在,直接返回答案。
如果不存在,将nums[j]存入idx

Code

1
2
3
4
5
6
7
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
idx = {}
for j, x in enumerate(nums):
if target - x in idx:
return [idx[target - x], j]
idx[x] = j
map定义

idx = {}

enumerate关键字

返回一个枚举对象。iterable 必须是一个序列,或 iterator,或其他支持迭代的对象。 enumerate() 返回的迭代器的 next() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0)和通过迭代 iterable 获得的值。

例1

1
2
3
4
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))

[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

例2

1
for j, x in enumerate(nums):

此时$j$就是遍历当前的下标,$x$就是遍历当前的值

9. 回文数

题目链接

题目思路

利用python的切片

Code

1
2
3
4
5
6
7
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
y = int(str(x)[::-1])
return y == x

切片

字符串、List都可以使用切片的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
str = 'Runoob'  # 定义一个字符串变量

print(str) # 打印整个字符串
# Runoob

print(str[0:-1]) # 打印字符串第一个到倒数第二个字符(不包含倒数第一个字符)
# Runoo

print(str[0]) # 打印字符串的第一个字符
# R

print(str[2:5]) # 打印字符串第三到第五个字符(包含第五个字符)
# noo

print(str[2:]) # 打印字符串从第三个字符开始到末尾
# noob

print(str * 2) # 打印字符串两次
# RunoobRunoob

print(str + "TEST") # 打印字符串和"TEST"拼接在一起
# RunoobTEST

字符串、List从$0$开始遍历

str[i:j]:将$[i, j)$的元素截取下来

9. 回文数

题目链接

题目思路

Code