题目描述:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解题思路(一):
1.回文数的先决条件x>0
.
2.利用序列类型数据的性质,先转字符串再进行切片翻转str[::-1]
.
题解代码:
class Solution:
def isPalindrome(self, x: int) -> bool:
if x<0:
return False
st = str(x)
return st[::] == st[::-1]
解题思路(二):
1.该方法中我们选择将整个数字进行数学方法的翻转,通过取整和取余操作获取整数中对应的数字进行比较。
需要注意的点是,在python中/
与//
的区别:
>>>print("2/2 =",2/2,"2//2 =",2//2)
2/2 = 1.0 2//2 = 1
>>>a,b = 2/2,2//2
>>>print(type(a),type(b))
<class 'float'> <class 'int'>
题解代码(方法二):
class Solution:
def isPalindrome(self, x: int) -> bool:
res=0
tem=x
while tem>0:
res = res*10+tem%10
tem = tem//10
return res == x
题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
解题思路:
1.根据题意数字到字母的映射,优先考虑字典存储映射关系:
digi_match_alpha = {
"2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}
2.字母组合(排列组合),递归或者回溯,将每个数字看作一层,逐层遍历数字对应的字母。当然还有其他方法。
回溯法-题解代码:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
res = []
if len(digits)==0 :
return res
digi_match_alpha = {
"2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}
def backtrack(strr,index):
##回溯的终止条件
if index > len(digits)-1:
res.append(strr)
return
digit = digits[index] ##当前的数字
alphas = digi_match_alpha[digit] ##当前数字对应的字母
for i in alphas:
backtrack(strr+i,index+1)
backtrack("",0)
return res
递归-题解代码:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
res = []
if len(digits)==0 :
return res
digi_match_alpha = {
"2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}
def findAlpha(digits,index,s):
##递归的终止条件
if index== len(digits):
res.append(s)
return
digit = digits[index] ##当前的数字
alphas = digi_match_alpha[digit] ##当前数字对应的字母
for i in alphas:
findAlpha(digits,index+1,s+i)
findAlpha(digits,0,"")
return res
题目描述:
给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。
解题思路:
1.利用python的内建模块collections
的defaultdict
,构建邻接表,将所有路径存进邻接表中。
d = collections.defaultdict(list)#邻接表
for f, t in tickets:
d[f].append(t) #路径存进邻接表
#或d[f] += [t]
2.对邻接表进行排序(即自然排序),最后利用深搜进行路径检索,将路径存放在一个列表中。
for f in d:
d[f].sort() #邻接表排序
ans = []
def dfs(f): #深搜函数
while d[f]:
dfs(d[f].pop(0))#路径检索
ans.insert(0, f) #放在最前
题解代码:
class Solution:
def findItinerary(self, tickets: List[List[str]]) -> List[str]:
d = collections.defaultdict(list)#邻接表
for f, t in tickets:
d[f].append(t) #路径存进邻接表
#或d[f] += [t]
for f in d:
d[f].sort() #邻接表排序
ans = []
def dfs(f): #深搜函数
while d[f]:
dfs(d[f].pop(0))#路径检索
ans.insert(0, f) #放在最前
dfs('JFK')
return ans
知识点整理:
for f, t in tickets:
d[f].append(t) # 路径存进邻接表d[f] += [t] type(t) ==
print(d)
output:
defaultdict(<class 'list'>, {
'JFK': ['SFO', 'ATL'], 'SFO': ['ATL'], 'ATL': ['JFK', 'SFO']})