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
|
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:
|
TypeScript:
|
||||||
|
|
||||||
**90.子集II**
|
**90.子集II**
|
||||||
@ -376,7 +454,7 @@ function subsetsWithDup(nums: number[]): number[][] {
|
|||||||
backTraking(nums, 0, []);
|
backTraking(nums, 0, []);
|
||||||
return resArr;
|
return resArr;
|
||||||
function backTraking(nums: number[], startIndex: number, route: number[]): void {
|
function backTraking(nums: number[], startIndex: number, route: number[]): void {
|
||||||
resArr.push(route.slice());
|
resArr.push([...route]);
|
||||||
const helperSet: Set<number> = new Set();
|
const helperSet: Set<number> = new Set();
|
||||||
for (let i = startIndex, length = nums.length; i < length; i++) {
|
for (let i = startIndex, length = nums.length; i < length; i++) {
|
||||||
if (helperSet.has(nums[i])) continue;
|
if (helperSet.has(nums[i])) continue;
|
||||||
@ -403,7 +481,7 @@ function combinationSum2(candidates: number[], target: number): number[][] {
|
|||||||
) {
|
) {
|
||||||
if (curSum > target) return;
|
if (curSum > target) return;
|
||||||
if (curSum === target) {
|
if (curSum === target) {
|
||||||
resArr.push(route.slice());
|
resArr.push([...route]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const helperSet: Set<number> = new Set();
|
const helperSet: Set<number> = new Set();
|
||||||
@ -430,7 +508,7 @@ function permuteUnique(nums: number[]): number[][] {
|
|||||||
return resArr;
|
return resArr;
|
||||||
function backTracking(nums: number[], route: number[]): void {
|
function backTracking(nums: number[], route: number[]): void {
|
||||||
if (nums.length === route.length) {
|
if (nums.length === route.length) {
|
||||||
resArr.push(route.slice());
|
resArr.push([...route]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const usedSet: Set<number> = new Set();
|
const usedSet: Set<number> = new Set();
|
||||||
|
Reference in New Issue
Block a user