20220420,
|
```javascript
/**
- @param {number} n
- @return {number} */ // 11:13 -> var fib = function(n) { let mod = 1000000007; if (n < 2) return n; // 这句忘写了,n=1的时候会返回0 let p = 0; let q = 1; let r = 0; // for (let i = 2; i <= n; n++) { // bug:死循环了 for (let i = 2; i <= n; i++) { r = (p + q) % mod; p = q; q = r; } return r; }; ``` | | —- |
20220417,16min
|
```javascript
/**
- @param {number} n
- @return {number} */ // 19:43 -> 19:59 // 区间动态规划 var fib = function(n) { if (n < 2) return n; let p = 0; let q = 1; let r = 0; const mod = 1000000007; for (let i = 2; i <= n; i++) { // const temp = q; // bug // q = p; // r = (p + temp) % mod; const temp = p; p = q; // r = temp + q; q = r % mod; // bug:如果先把原来的值算出来,再余mod就会出错 r = (temp + q ) % mod; q = r; } return r; };
// var fib = function(n) { // const MOD = 1000000007; // if (n < 2) { // return n; // } // let p = 0, q = 0, r = 1; // for (let i = 2; i <= n; ++i) { // p = q; // q = r; // r = (p + q) % MOD; // } // return r; // };
**知识点**<br />- i = 2时, p = 0; q = 0; r = 1; 就不需要使用temp<br />- r = temp + q; q = r % mod; 和q = (temp + q) % mod得到的值不一样<br /> |
| --- |
<a name="M09SS"></a>
## 20220416,8min
| <br />```javascript
/**
* @param {number} n
* @return {number}
*/
// 18:04 -> 18:12
var fib = function(n) {
const mod = 1000000007;
// if (n <=2) return n; // bug
if (n < 2) return n;
let p = 0; q = 1;
for (let i = 2; i <= n; i++) {
let temp = p;
p = q;
// q = temp + q // bug:每次都给都要取模后的结果,所以不能把取模放return中,而应该放这里
q = (temp + q) % mod
}
// return q % mod;
return q
};
执行用时:52 ms, 在所有 JavaScript 提交中击败了95.50%的用户
内存消耗:40.9 MB, 在所有 JavaScript 提交中击败了43.78%的用户
通过测试用例:51 / 51 |
| —- |
20220415,不通过
|
```javascript
/**
- @param {number} n
- @return {number} */ // 22:05 -> 22:18 var fib = function(n) { // let x = 1, y = 0; if (n === 0) { return 0; } if (n === 1) { return 1; } for (let i = 2; i <= n; i++) { return fib(i-1) + fib(i-2); } }; ``` | | —- |