es6...扩展运算?
为什么一定要使用 ...path
才能正确的运行,在上面代码中测试的结果是一样的,而下面则一定要用 ...
?否则就会出现如图2所示的结果
这段代码是 解决 (给定两个整数 n 和 k,返回范围 [1,n] 中所有可能的 k 个数的组合。) 这个问题的 ,用的回溯
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<!--<script src="test.js"></script>-->
<script >
"use strict";
let a = [2,3]
let b = []
let c = []
b.push(a)
c.push([...a])
console.log(b)
console.log(c)
var combine = function(n, k) {
let result = []
let path = []
const backstrack = function(n,k,starIndex){
if(path.length === k){
// 保存结果
// result.push(path)
result.push([...path])
return;
}
for(let i = starIndex;i<=n;i++){
path.push(i)
backstrack(n,k,i+1)
path.pop()
}
}
backstrack(n,k,1)
return result
};
console.log(combine(4,2))
</script>
</html>
回复
1个回答
test
2024-06-26
这个用C语言中的指针很好理解,result.push(path),只是创建了个指针,指向了path数组。修改path,就同时修改所有push进入result的值。而result.push([...path])则是对path进行了解构,然后再进行push操作,存入result数组,此时修改path,对result无影响。也可以先看看这个,更好理解。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容