JavaScript实现1~n取k个数组合的代码输出与预期不符问题排查
问题原因分析
- 控制台仅显示3组输出是运行环境的控制台自动折叠了相似内容导致的,你的代码打印逻辑没有问题,点击控制台输出条目前的折叠箭头就能看到完整的10组输出。
- 你代码中
ans数组的最终返回结果会不符合预期:因为arr是引用类型,直接执行ans.push(arr)时存入的是arr的内存引用,后续arr.pop()修改数组时,ans中所有已存入的引用指向的内容都会同步变化,最终ans会包含10个空数组。
修复方案
如果需要ans中存储正确的组合结果,只需在存入时拷贝当前arr的实际值即可,将ans.push(arr)修改为ans.push([...arr])。
修复后完整代码如下:
let ans = [], arr = []; function makeCombination(n, k, low = 1) { if (k == 0) { // 拷贝当前数组值存入结果,避免后续操作修改已保存的组合 ans.push([...arr]); console.log(...arr); return; } for (let i = low; i <= n; i++) { arr.push(i); makeCombination(n, k - 1, i + 1); arr.pop(); } return ans; } var n = 5; var k = 3; makeCombination(n, k);
内容的提问来源于stack exchange,提问作者Baba ramdev
相关产品推荐
相关产品推荐

