題目描述:
判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
解題思路(一):
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.02//
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//
10return res == x
題目描述:
給定乙個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下(與**按鍵相同)。注意 1 不對應任何字母。
解題思路:
1.根據題意數字到字母的對映,優先考慮字典儲存對映關係:
digi_match_alpha =
2.字母組合(排列組合),遞迴或者回溯,將每個數字看作一層,逐層遍歷數字對應的字母。當然還有其他方法。
回溯法-題解**:
class
solution
:def
lettercombinations
(self, digits:
str)
-> list[
str]
: res =
iflen
(digits)==0
:return res
digi_match_alpha =
defbacktrack
(strr,index)
:##回溯的終止條件
if index >
len(digits)-1
: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 =
iflen
(digits)==0
:return res
digi_match_alpha =
deffindalpha
(digits,index,s)
:##遞迴的終止條件
if index==
len(digits)
: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]
#路徑存進鄰接表
#或d[f] += [t]
2.對鄰接表進行排序(即自然排序),最後利用深搜進行路徑檢索,將路徑存放在乙個列表中。
for f in d:
d[f]
.sort(
)#鄰接表排序
ans =
defdfs
(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]
#路徑存進鄰接表
#或d[f] += [t]
for f in d:
d[f]
.sort(
)#鄰接表排序
ans =
defdfs
(f):
#深搜函式
while d[f]
: dfs(d[f]
.pop(0)
)#路徑檢索
ans.insert(
0, f)
#放在最前
dfs(
'jfk'
)return ans
知識點整理:
for f, t in tickets:
d[f]
# 路徑存進鄰接表d[f] += [t] type(t) ==
print
(d)
output:
defaultdict(
<
class
'list'
>
,)
Leetcode刷題之旅(Day2)
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
《演算法筆記》Day 2
全排列問題 include const int maxn 11 int n,p maxn hashtable maxn void generatep int index printf n return for int x 1 x n x int main void 推演 hashtable fals...
演算法與資料結構 刷題日記day2
拓撲序列,參考 拓撲序列 一棵二叉樹共有 25 個結點,其中 5 個是葉子結點,則度為 1 的結點數為?在任意一棵二叉樹中,度為 0 的葉子結點總是比度為 2 的結點多乙個。證明 一棵樹的節點數n 度為0的節點數n 0 度為1的節點數n 1 度為2的節點數n 2,即 n n 0 n1 n 2n n ...