題目54:螺旋矩陣
給定乙個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。
題解:
class
solution
:def
spiralorder
(self, matrix: list[list[
int]])
-> list[
int]
:# 取首行,去除首行後,對矩陣翻轉來建立矩陣
# 再遞迴知道新矩陣為,退出並將取到的資料返回
res =
if matrix ==
:return res
res.extend(matrix[0]
) new_matrix =
[reversed
(i)for i in matrix[1:
]]if new_matrix ==
:return res
r = self.spiralorder(
[i for i in
zip(
*new_matrix)])
res.extend(r)
return res
執行結果:
題目59:螺旋矩陣ⅱ
給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。
題解:
class
solution
(object):
defgeneratematrix
(self, n)
:"""
:type n: int
:rtype: list[list[int]]
"""array =[[
0for i in
range
(n)]
for j in
range
(n)]
c, j =1,
0while c<=n*n:
# 從左向右
for i in
range
(j, n-j)
: array[j]
[i]= c
c +=
1# 從上往下走
for i in
range
(j+1
, n-j)
: array[i]
[n-j-1]
= c c +=
1# 從右往左走
for i in
range
(n-j-
2, j-1,
-1):
array[n-j-1]
[i]= c
c +=
1# 從下往上走
for i in
range
(n-j-
2, j,-1
):array[i]
[j]= c
c +=
1 j +=
1return array
執行結果:
題目61:旋轉鍊錶
給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。
題解:
class
solution
:def
rotateright
(self, head: listnode, k:
int)
-> listnode:
ifnot head:
return
none
orig_head, cnt = head,
1#cnt如果會遍歷到none,就從0開始計數(右開空間),如果遍歷到最後有效位,就從1開始(右閉空間)
while head.
next
:# head遍歷到了最後一位
head, cnt = head.
next
, cnt+
1# cnt若從1開始,且緊跟著head,那麼pointer最終停到哪,cnt就包括到哪。是完全相同的
head.
next
= orig_head # 首尾連線上
step = cnt - k % cnt-
1# 計算有效移動步數
while step >0:
orig_head, step = orig_head.
next
, step -
1
new_head, orig_head.
next
= orig_head.
next
,none
return new_head
執行結果:
Leetcode騰訊精選練習2
原題 兩個大小為 m 和 n 的排序陣列 nums1 和 nums2 請找出兩個排序陣列的中位數並且總的執行時間複雜度為 o log m n 示例 1 nums1 1,3 nums2 2 中位數是 2.0 示例 2 nums1 1,2 nums2 3,4 中位數是 2 3 2 2.5 看到這題目自然...
Leetcode騰訊精選練習04
原題 leetcode7 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1...
Leetcode騰訊精選練習05
請你來實現乙個atoi函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組...