Fibonachi raqam
Birgina masalani bir necha usulda yechib ko'rdim.Barchasi to'gri naticha qaytaradi lekin ishlash vaqtida farq qiladi demak
Masala sharti: fibonachi raqam qiymatini topish(leetcode 509 masala).Fibonachi raqam bu o'zidan oldingi 2 raqam yig'indisi hisoblanadi.Masalan Fibonachi(4) => 3 ga teng 4 dan oldingi 2 ta raqam 3 + 2 = 5 bo'lmaydimi deydigan bo'lsak yo'q bu ketma-ketlik biz bilgan oddiy ketma ketlikda emas.
F(0) => 0
F(1) => 1
F(2) = F(1) + F(0) => 1
F(3) = F(2) + F(1) => 2
F(4) = F(3) + F(2) => 3
1-Yechim fibonachi arrayni shakllantirish orqali
var fib = function(n){ if(n <=1){ return n } let fibArray = new Array(n+1).fill(0) fibArray[1] = 1 for(let i =2; i <= n; i++){ fibArray[i] = fibArray[i - 1] + fibArray[i - 2] } return fibArray[n] }
2-yechim Recursiya orqali yechim code ancha sodda
var fib = function(n){ if(n <=1) return n return fib(n -1) + fib(n - 2) }
3-yechim memorizatsiya orqali React chilar biladi Reactda memorizatsiya qilish juda oson tayyor useMemo,React.Memo hooklar mavjud lekin pure JS da memorizatsiya hash Map orqali yaratiladi.
var fib = function(n){ let memo = new Map() memo.set(0,0) // Map da objectdan farqli o'laroq raqamni memo.set(1,1) // ham key sifatida ishlatsa bo'ladi function fb(fibonachi){ if(memo.has(fibonachi)){ return memo.get(fibonachi) } memo.set(fibonachi, fb(fibonachi -1) + fb(fibonachi-2)) return memo.get(fibonachi) } return fb(n) }
bularni tushunganingizni bilish uchun leetcode da yechin ko'ring o'zingiz ham