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++) {
    1. // bug:忘记写10~25之间的判断了
    2. const n = String(numStr[i-2]) + String(numStr[i-1])
    3. if (n >= 10 && n <= 25) {
    4. dp[i] = dp[i-1] + dp[i-2];
    5. } else {
    6. dp[i] = dp[i-1];
    7. }
    } return dp[len] }; ``` | | —- |

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才会有另外的翻译方法
不同的翻译方法又会有不同的组合
改进 | | —- |