mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-10 20:40:39 +08:00
Merge branch 'youngyangyang04:master' into master
This commit is contained in:
@ -268,7 +268,7 @@ var permuteUnique = function (nums) {
|
||||
|
||||
function backtracing( used) {
|
||||
if (path.length === nums.length) {
|
||||
result.push(path.slice())
|
||||
result.push([...path])
|
||||
return
|
||||
}
|
||||
for (let i = 0; i < nums.length; i++) {
|
||||
@ -303,7 +303,7 @@ function permuteUnique(nums: number[]): number[][] {
|
||||
return resArr;
|
||||
function backTracking(nums: number[], route: number[]): void {
|
||||
if (route.length === nums.length) {
|
||||
resArr.push(route.slice());
|
||||
resArr.push([...route]);
|
||||
return;
|
||||
}
|
||||
for (let i = 0, length = nums.length; i < length; i++) {
|
||||
|
@ -406,6 +406,63 @@ const countSubstrings = (s) => {
|
||||
}
|
||||
```
|
||||
|
||||
TypeScript:
|
||||
|
||||
> 动态规划:
|
||||
|
||||
```typescript
|
||||
function countSubstrings(s: string): number {
|
||||
/**
|
||||
dp[i][j]: [i,j]区间内的字符串是否为回文(左闭右闭)
|
||||
*/
|
||||
const length: number = s.length;
|
||||
const dp: boolean[][] = new Array(length).fill(0)
|
||||
.map(_ => new Array(length).fill(false));
|
||||
let resCount: number = 0;
|
||||
// 自下而上,自左向右遍历
|
||||
for (let i = length - 1; i >= 0; i--) {
|
||||
for (let j = i; j < length; j++) {
|
||||
if (
|
||||
s[i] === s[j] &&
|
||||
(j - i <= 1 || dp[i + 1][j - 1] === true)
|
||||
) {
|
||||
dp[i][j] = true;
|
||||
resCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return resCount;
|
||||
};
|
||||
```
|
||||
|
||||
> 双指针法:
|
||||
|
||||
```typescript
|
||||
function countSubstrings(s: string): number {
|
||||
const length: number = s.length;
|
||||
let resCount: number = 0;
|
||||
for (let i = 0; i < length; i++) {
|
||||
resCount += expandRange(s, i, i);
|
||||
resCount += expandRange(s, i, i + 1);
|
||||
}
|
||||
return resCount;
|
||||
};
|
||||
function expandRange(s: string, left: number, right: number): number {
|
||||
let palindromeNum: number = 0;
|
||||
while (
|
||||
left >= 0 && right < s.length &&
|
||||
s[left] === s[right]
|
||||
) {
|
||||
palindromeNum++;
|
||||
left--;
|
||||
right++;
|
||||
}
|
||||
return palindromeNum;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
-----------------------
|
||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||
|
@ -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