javascript - 数组在本地机器上是可迭代的,但在 Leetcode 上不行?
问题描述
我正在解决这个leetcode 问题(在电话号码中找到的字母组合),并且该解决方案似乎在我的机器上运行,在 vscode 中。这是我正在运行的代码,在“23”的示例输入下:
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
mapping = [ //this used to be an object in form {2: ['a','b', 'c'] (and so on...)}, i changed it to this to see if it fixed anything but it didn't
[],
[],
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j', 'k', 'l'],
['m', 'n', 'o'],
['p', 'q', 'r', 's'],
['t', 'u', 'v'],
['w', 'x', 'y', 'z']
]
letter_combinations = [];
for(let letter of mapping[digits[0]]){
let prefix = letter;
for(let suffix of mapping[digits.slice(1)]){
letter_combinations.push([prefix + suffix]);
}
}
return letter_combinations;
};
console.log(letterCombinations('23'));
在 VSCode/我的机器中,它似乎正在工作,因为这是输出:
[
[ 'ad' ], [ 'ae' ],
[ 'af' ], [ 'bd' ],
[ 'be' ], [ 'bf' ],
[ 'cd' ], [ 'ce' ],
[ 'cf' ]
]
但是,在 Leetcode 中,我得到了这个错误:
Line 24 in solution.js
for(let letter of mapping[digits[0]]){
^
TypeError: mapping[digits[0]] is not iterable
Line 24: Char 30 in solution.js (letterCombinations)
Line 41: Char 19 in solution.js (Object.<anonymous>)
Line 16: Char 8 in runner.js (Object.runner)
Line 32: Char 26 in solution.js (Object.<anonymous>)
Line 1251: Char 30 in loader.js (Module._compile)
Line 1272: Char 10 in loader.js (Object.Module._extensions..js)
Line 1100: Char 32 in loader.js (Module.load)
Line 962: Char 14 in loader.js (Function.Module._load)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
Line 17: Char 47 in run_main_module.js
这似乎告诉我'mapping [digits [0]''是不可迭代的。在 Leetcode 和 VSCode 中将 'mapping[digits[0]' 打印到控制台会返回一个 ['a', 'b', 'c'] 数组,它应该是可迭代的,对吧?
我认为解决此问题的一种方法是使用 for...in 循环或 for(var;cond;step) 循环,而不是 'letter',让它成为 'mapping[digits[0]][index ]',但是我相信这将是一个低效的解决方法?
所以我想知道如何直接遍历mapping[digits[0]],或者如果不可能,我为什么不能?
我感谢所有的帮助,如果我遗漏了一些非常明显的东西,请原谅我。
解决方案
您编写的解决方案仅在以下情况下有效digits.length === 2
在 Leetcode 和 VSCode 中将 'mapping[digits[0]' 打印到控制台会返回一个 ['a', 'b', 'c'] 数组,它应该是可迭代的,对吧?
如果数字是空字符串''
怎么办?digits[0]
将返回未定义
我认为解决此问题的一种方法是使用 for...in 循环或 for(var;cond;step) 循环,而不是 'letter',让它成为 'mapping[digits[0]][index ]',但是我相信这将是一个低效的解决方法?
切换到正常for
循环或使用forEach
不会改变迭代次数,因此与for...of
循环相比它们并不是低效的
此外,mapping[digits.slice(1)]
当数字的长度为 3 时不起作用,因为您的映射数组只有最大索引为9
('123'.slice(1)
返回 23 但mapping[23]
未定义)的元素
推荐阅读
- excel - 如何仅在选定单元格上使用 VBA DateAdd
- javascript - 如何在选项卡切换中激活选项卡面板的第二项
- filter - Tableau - 如何将筛选值包含到操作中并筛选目标工作表
- gitlab-ci - 在 Gitlab CI 中,当我推送标签时取消 master 上的管道
- actions-on-google - Google Assistant Basic 卡片正文是可点击的
- javascript - 如何使用 JavaScript 读取跨域 CSS 规则?
- python - 使用 3d-lego 绘图可视化 numpy 数组
- next.js - NextJs 重定向错误
- javascript - Nodejs/Javascript 输出写入所有文件而不是单个文件
- javascript - 自定义钩子在点击时不触发