509. Fibonacci Number
T: O(n)
S: O(n)
class Solution {
public int fib(int n) {
if (n == 0 || n == 1) {
return n;
}
int[] dp = new int[n+1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
}
1 0
dp_i = dp_i_1 + dp_i_2
if get dp_i => do right shift value to
so
dp_i_2 = dp_i_1;
dp_i_1 = dp_i;
所以最後結果會在 dp_i_1 上, 因為最後 dp_i 給了 dp_i_1
T: O(n)
S: O(1)
class Solution {
public int fib(int n) {
if (n == 0 || n == 1) {
return n;
}
int dp_i_2 = 0;
int dp_i_1 = 1;
for (int i = 2; i <= n; i++) {
int dp_i = dp_i_1 + dp_i_2;
dp_i_2 = dp_i_1;
dp_i_1 = dp_i;
}
return dp_i_1;
}
}
請畫圖
class Solution {
public int fib(int n) {
if (n == 0 || n == 1) {
return n;
}
int dpi2 = 0;
int dpi1 = 1;
for (int i = 2; i <= n; i++) {
int dpi = dpi2 + dpi1;
dpi2 = dpi1; // notice order, this put first
dpi1 = dpi; // at last, this ans
}
return dpi1;
}
}
// i-2. i-1 i
// i-2 i-1
// => i-2 = i-1
// =>.i-1 = i
Last updated
Was this helpful?