剑指 Offer 46. 把数字翻译成字符串

133 阅读1分钟

剑指 Offer 46. 把数字翻译成字符串

代码实现 使用降低维度的思想,一个数字看成为字符串,然后去掉前面的两位数,或者一位数,当前面两位数组合是大于25的数,说明前面两个数字,要想翻译为英文就必须得分开考虑,于是就降了一个长度,进行递归处理,如果是在25以内的数字,则需要考虑两个情况,一个是分开和不分开,于是就是dp(str.slice(1)) + dp(str.slice(2)),但是这里有个特殊情况就是当str只是为两位数字时候, dp(str.slice(2))有个单独的bug,于是需要作出单独的处理才行,代码实现如下所示

var translateNum = function (num) {
  function dp(str) {
    if(str.length <=1){
      return str.length
    }
    if(str.charAt(0)=='0'){
      return dp(str.slice(1))
    }
    var fNum = Number(str.slice(0, 2));
    if (fNum > 25) {
      return dp(str.slice(1));
    } else {
      if(str.slice(2)){
        return dp(str.slice(1)) + dp(str.slice(2));
      }else{
        return dp(str.slice(1)) + 1;
      }
    }
  }
  return dp(String(num));
};