20220509, 11min,相隔11天
|
```javascript
/**
- @param {number} num
- @return {number}
*/
// 21:10 -> 21:21
var translateNum = function(num) {
const numStr =
${num}
; let dp = []; dp[0] = 1; dp[1] = 1; const len = numStr.length for (let i = 2; i <= len; i++) {
} return dp[len] }; ``` | | —- |// bug:忘记写10~25之间的判断了
const n = String(numStr[i-2]) + String(numStr[i-1])
if (n >= 10 && n <= 25) {
dp[i] = dp[i-1] + dp[i-2];
} else {
dp[i] = dp[i-1];
}
20220427,6min
|
```javascript
/**
- @param {number} num
- @return {number}
*/
// 20:53 -> 20:59
var translateNum = function(num) {
const numStr =
${num}
; const len = numStr.length; let dp = new Array(len + 1); dp[0] = 1; dp[1] = 1; for (let i = 2; i <= len; i++) { // const n = ~~(numStr[i-1] + numStr[i]) // bug:当nums长度为2时,numStr[2]为undefined,此时应是numStr[0] + numStr[1] const n = ~~(numStr[i-2] + numStr[i-1]) if (n >=10 && n <= 25) { dp[i] = dp[i-1] + dp[i-2] } else { dp[i] = dp[i-1] } } return dp[len]; }; ``` | | —- |
20220421,14min
|
```javascript
/**
- @param {number} num
@return {number} */ // 13:36 -> 13:50 // 区间动态规划, f(n) = f(n-1) + f(n-2) var translateNum = function(num) { // const len = num.length; // bug:数字num的length为undefined const numStr =
${num}
const len = numStr.length; let dp = new Array(len +1); dp[0] = 1; dp[1] = 1; for (let i = 2; i <= len; i++) { // const cur = ~~(dp[i] + dp[i-1]) // bug: // const cur = ~~(dp[i-1] + dp[i]) // bug:dp[i-1]是数字,需要转换为字符串 // const cur = ~~(${dp[i-1]}
+${dp[i]}
) // const cur = ~~(${num[i-2]}
+${num[i-1]}
) // bug:num是数字,不是字符串 const cur = ~~(${numStr[i-2]}
+${numStr[i-1]}
)if (cur >= 10 && cur <= 25) { dp[i] = dp[i -1] + dp[i-2] } else { dp[i] = dp[i-1]; } } return dp[len]; }; ``` | | —- |
20220420, 29min
|
```javascript
/**
- @param {number} num
@return {number} */ // 09:19 -> 09:48 // 区间动态规划,类似于跳台阶问题 // f(n) = f(n-1) + f(n-2) var translateNum = function(num) { const numStr =
${num}
const len = numStr.length; // let dp = new Array(len); let dp = new Array(len + 1); // dp[0] = 1; // dp[1] = 2; // bug:得当成1个数,1个数是1种情况。如果是当成2个数,不一定是2种情况// dp[0] = 0; // bug: 0个数也得是1,这样dp[2] = dp[1] + dp[0]的时候才会成为2 dp[0] = 1; dp[1] = 1; // dp[2] = 2; for (let i = 2; i <= len; i++) { // dp[len-1] = dp[len-2] + dp[len-3]; // const s = ~~(numStr[i-1] + numStr[i]) const s = ~~(numStr[i-2] + numStr[i-1]) if (s >= 10 && s<= 25) { dp[i] = dp[i-1] + dp[i-2]; console.log(dp[i]) } else { dp[i] = dp[i-1]; } } // return dp[len-1]; return dp[len]; // len个数 }; ``` | | —- |
20220419,不通过,first time
|
```javascript
/**
- @param {number} num
- @return {number}
*/
// 16:00 -> 16:08
var translateNum = function(num) {
let n = 0;
// for (let i = 0; i < num.length; i++) { // bug: num.length为undefind,因为num是Number类型
const numStr =
${num}
for (let i = 0; i < numStr.length; i++) { // if (${num[i]}${num[i+1]}
<= 25) { if (${numStr[i] + numStr[i+1]}
<= 25) { n += 1; } } return n; }; ```执行结果:解答错误 通过过测试用例:30 / 49 输入:506 输出:2 预期结果:1
错误原因:
每次只要i , i+1,两位小于25就+1,这样会导致算出来的结果与预期结果多很多
思考:
所有的值是1种翻译方法,10<= x <= 25才会有另外的翻译方法
不同的翻译方法又会有不同的组合
改进 |
| —- |