泰波那契序列 tn 定義如下:
t0 = 0, t1 = 1, t2 = 1, 且在 n >= 0 的條件下 tn+3 = tn + tn+1 + tn+2
給你整數n
,請返回第 n 個泰波那契數 tn 的值。
示例 1:
輸入:n = 4
輸出:4
解釋:t_3 = 0 + 1 + 1 = 2
t_4 = 1 + 1 + 2 = 4
示例 2:
輸入:n = 25
輸出:1389537
class
solution
return t[n];}
}
class
solution
return t[n];}
}
方法一:空間優化,動態計算
class
solution
return z;
}}
複雜度分析
方法二:效能優化:帶記憶的遞迴
class
tri:
def __init__
(self)
: def helper
(k):
if k ==0:
return
0if nums[k]
:return nums[k]
nums[k]
=helper
(k -1)
+helper
(k -2)
+helper
(k -3)
return nums[k]
n =38 self.nums = nums =[0
]* n
nums[1]
= nums[2]
=1helper
(n -1)
class
solution
: t =
tri(
) def tribonacci
(self, n:
int)
->
int:
return self.t.nums[n]
複雜度分析
時間複雜度:o(1),預計算 38 個斐波那契數,並在陣列中檢索。
空間複雜度:o(1),儲存 38 個斐波那契數的陣列。
方法三:效能優化:動態計算
class
tri}
class
solution
}
複雜度分析
時間複雜度:o(1),預計算 38 個斐波那契數字,並在陣列中檢索。
空間複雜度:o(1),儲存 38 個斐波那契數字的陣列。
每日演算法 洗牌演算法
給定乙個n個數的序列,設計乙個演算法將其隨機打亂,保證每個數出現在任意乙個位置的概率相同 也就是說在n 個的排列中,每乙個排列出現的概率相同 假設輸入為陣列num length 隨機選乙個數,放到num 0 中,再隨機選數,如果該數已經選過,重新選,直到該數未選過時放入num 1 中,以此類推,直到...
每日演算法 報數
1.1 2.11 3.21 4.1211 5.1112211被讀作 one 1 乙個一 即11。11被讀作 two 1s 兩個一 即21。21被讀作 one 2 one 1 乙個二 乙個一 即1211。給定乙個正整數 n 1 n 30 輸出報數序列的第 n 項。注意 整數順序將表示為乙個字串。示例 ...
每日演算法 1
1 leetcode第46題 全排列 給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 1 思路 核心思想是在乙個排列的基礎上,1,2,3,按照規律交換位置,得到新的排列。比如1和2交換 2,1,...