mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Merge pull request #1377 from Jerry-306/patch-58
新增 回溯算法去重问题的另一种写法 JavaScript 版本代码
This commit is contained in:
@ -365,6 +365,84 @@ class Solution:
|
||||
return res
|
||||
```
|
||||
|
||||
JavaScript:
|
||||
|
||||
**90.子集II**
|
||||
|
||||
```javascript
|
||||
function subsetsWithDup(nums) {
|
||||
nums.sort((a, b) => a - b);
|
||||
const resArr = [];
|
||||
backTraking(nums, 0, []);
|
||||
return resArr;
|
||||
function backTraking(nums, startIndex, route) {
|
||||
resArr.push([...route]);
|
||||
const helperSet = new Set();
|
||||
for (let i = startIndex, length = nums.length; i < length; i++) {
|
||||
if (helperSet.has(nums[i])) continue;
|
||||
helperSet.add(nums[i]);
|
||||
route.push(nums[i]);
|
||||
backTraking(nums, i + 1, route);
|
||||
route.pop();
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
**40. 组合总和 II**
|
||||
|
||||
```javascript
|
||||
function combinationSum2(candidates, target) {
|
||||
candidates.sort((a, b) => a - b);
|
||||
const resArr = [];
|
||||
backTracking(candidates, target, 0, 0, []);
|
||||
return resArr;
|
||||
function backTracking( candidates, target, curSum, startIndex, route ) {
|
||||
if (curSum > target) return;
|
||||
if (curSum === target) {
|
||||
resArr.push([...route]);
|
||||
return;
|
||||
}
|
||||
const helperSet = new Set();
|
||||
for (let i = startIndex, length = candidates.length; i < length; i++) {
|
||||
let tempVal = candidates[i];
|
||||
if (helperSet.has(tempVal)) continue;
|
||||
helperSet.add(tempVal);
|
||||
route.push(tempVal);
|
||||
backTracking(candidates, target, curSum + tempVal, i + 1, route);
|
||||
route.pop();
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
**47. 全排列 II**
|
||||
|
||||
```javaescript
|
||||
function permuteUnique(nums) {
|
||||
const resArr = [];
|
||||
const usedArr = [];
|
||||
backTracking(nums, []);
|
||||
return resArr;
|
||||
function backTracking(nums, route) {
|
||||
if (nums.length === route.length) {
|
||||
resArr.push([...route]);
|
||||
return;
|
||||
}
|
||||
const usedSet = new Set();
|
||||
for (let i = 0, length = nums.length; i < length; i++) {
|
||||
if (usedArr[i] === true || usedSet.has(nums[i])) continue;
|
||||
usedSet.add(nums[i]);
|
||||
route.push(nums[i]);
|
||||
usedArr[i] = true;
|
||||
backTracking(nums, route);
|
||||
usedArr[i] = false;
|
||||
route.pop();
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
TypeScript:
|
||||
|
||||
**90.子集II**
|
||||
@ -376,7 +454,7 @@ function subsetsWithDup(nums: number[]): number[][] {
|
||||
backTraking(nums, 0, []);
|
||||
return resArr;
|
||||
function backTraking(nums: number[], startIndex: number, route: number[]): void {
|
||||
resArr.push(route.slice());
|
||||
resArr.push([...route]);
|
||||
const helperSet: Set<number> = new Set();
|
||||
for (let i = startIndex, length = nums.length; i < length; i++) {
|
||||
if (helperSet.has(nums[i])) continue;
|
||||
@ -403,7 +481,7 @@ function combinationSum2(candidates: number[], target: number): number[][] {
|
||||
) {
|
||||
if (curSum > target) return;
|
||||
if (curSum === target) {
|
||||
resArr.push(route.slice());
|
||||
resArr.push([...route]);
|
||||
return;
|
||||
}
|
||||
const helperSet: Set<number> = new Set();
|
||||
@ -430,7 +508,7 @@ function permuteUnique(nums: number[]): number[][] {
|
||||
return resArr;
|
||||
function backTracking(nums: number[], route: number[]): void {
|
||||
if (nums.length === route.length) {
|
||||
resArr.push(route.slice());
|
||||
resArr.push([...route]);
|
||||
return;
|
||||
}
|
||||
const usedSet: Set<number> = new Set();
|
||||
|
Reference in New Issue
Block a user