一个数字有多少种不同的解码方式

卡齐姆·沙伯(Kazim Shabbir)

我很困惑,我不确定该怎么办。下面的代码是我在考虑解决方案时记下的内容。

这是带有示例的问题:

使用以下映射将包含来自AZ的字母的消息编码为数字:

'A'-> 1'B'-> 2 ...'Z'-> 26

给定一个仅包含数字的非空字符串,请确定对其进行解码的总数。

范例1:

输入:“ 12”输出:2说明:可以将其解码为“ AB”(1 2)或“ L”(12)。示例2:输入:“ 226”输出:3说明:可以将其解码为“ BZ”(2 26),“ VF”(22 6)或“ BBF”(2 2 6)。

const numDecodings = (s) => {
  // const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('')
  // //write an object with alphabets. The numbers will be keys and the letters will be value

  const alphaObject = {
    1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 
    10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 
    18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z'
  };

  const countObj = {};
  // console.log()

  if (s >= "11") {
    s.split("");
    if (!countObj[alphaObject[s]]) {
      return (countObj[alphaObject[s]] = 1);
    }

    //i return the length because
    //i noticed from the examples that the outputs matched the length.
    //since every digit represents a letter.
    //And every letter is a way to do the problem
  } else if (s <= "10") {
    return 1;
  } else if (s === "0") {
    return 0;
  }
  // else if(s.length >= 4){
  //     //test case 1223
  //     //abbc
  //     //lw
  //     //abw
  //     //lbc
  //     //avc
  //     // return s.length + 2
  //     s.alphaObject

  // }
};
//getting it wrong for testcase 0
console.log(numDecodings("14"));

萨沙

这可以递归地完成:

  • 查看字符串长度是否为空,然后返回1,因为拆分有效。

  • 如果它是一个字符串,并且在第一个位置以“ 0”开头,那么这将不是解决方案,因为(仅允许使用1-26)=>返回false。

  • 如果长度为1,则可能的长度为(1-9)=>返回1。

  • 通过递归看是否没有第一个字符的字符串是一种可能的解决方案。看是否还有第二个分割数为2位的拆分方法。

  • 如果字符串的长度至少为2个字符,并且Integer值的最大值为26,则可能是一个解决方案,请递归地继续操作,不要使用前2个字符。

  • 现在看看是否两个try都不为false =>总结两个返回结果。

  • 如果只有第二个不是false =>返回此结果。

  • 否则,返回第一个结果。

function numDecodings(string) {
    if (string.length===0)
        return 1;
    else if (string.charAt(0)==='0')
        return false;
    else if (string.length==1)
        return 1;
        
    let one = numDecodings(string.slice(1));
          
    let test = parseInt(string.substr(0,2));
    if (string.length>=2 && test<=26) {
           let two = numDecodings(string.slice(2));
         if (two!=false && one!=false)
             return one+two;
         else if (two!=false)
             return two;
    }
    return one;
}

console.log(numDecodings ('226')); // 2,2,6 / 22,6 / 2,26 =>3
console.log(numDecodings ('1223')); // 1,2,2,3 / 12,2,3 / 12,23 / 1,22,3 / 1,2,23 => 5
console.log(numDecodings ('1203')); // 1,20,3 => 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

打印一个数字,取决于有多少个X

(c ++)使用相同的代码以4种不同的方式遍历一个数组

在 Linux 中一个进程有多少种方式被终止?

如何计算一个数组中有多少个不同的对象?

一个数字出现多少次

有没有一种方法可以从左到右遍历不同的列,并计算每行遇到的第一个数字是否为1?

在不同位置的其他字符串中,第一个字符串中有多少个数字

我有一个项目,我必须以表格格式打印平均值,但是对于不同的数字,它以两种不同的方式打印表格

计算一个数字出现多少次,比前一个数字少一个

这两种求一个数的 2 的幂的方法有何不同?

用一种惯用的方法来获得与前一个数字不同的随机数?

给定一个整数从0到N的数组,有多少种方式可以使array [i]不能为i

如何优化我的代码(“你有多少种方法可以计算一个数字的总和?”)

将n个对象划分为k个组的方式的数量有多少种,这样,没有一个组比以前形成的组具有更少的对象?

有没有办法减去上述在python另一个号码表,从每一个数字是多少?

查找所有均分一个数字的数字

是否有一种实用的方法来计算有多少个数组与至少一个其他数组相交?

以两种不同的方式对列表进行排序,一个接一个

预期对Int进行解码,但找到了一个数字

预期解码Dictionary <String,Any>,但找到一个数字

JavaScript 函数来检查编码一个数字需要多少位?

计算一个字符串中出现了多少个数字

一个数字作为叶子节点出现多少次?

该IP地址中的最后一个数字是多少?

需要以一种简单的方式创建一个数据表。

一个复杂的小组可以进行多少种不同的组合?

创建没有一个数字的随机矩阵

我有一个数字格式感知错误

最多更改一个数字就可以获得多少个可被3整除的数字