20220507, 8min,中间应隔4天,但是隔了8天才回顾
|
```javascript
/**
- @param {number[]} nums
@return {number[][]} */ // 10:51 -> 10:59 // 回溯 var permuteUnique = function(nums) { nums.sort((a, b) => a - b); // bug:忘写了 const len = nums.length; let ans = []; let path = []
// for (let i = 0; i < len; i++) { // bug:回溯函数与循环的顺序错了 const trackBacking = (used) => { if (path.length === len) { ans.push([…path]); return; } // const trackBacking = (used) => { for (let i = 0; i < len; i++) { if (used[i]) continue; if (i > 0 && nums[i] === nums[i-1] && !used[i-1]) continue;
path.push(nums[i]); used[i] = true; trackBacking(used); path.pop(); used[i] = false; } } trackBacking([]); return ans; }; ``` | | —- |
20220428,9min
|
```javascript
/**
- @param {number[]} nums
@return {number[][]} */ // 19:28 -> 19:37 // 回溯 var permuteUnique = function(nums) { nums.sort((a, b) => a - b); // bug:忘记写了 const path = []; const ans = []; const len = nums.length; const backtracking = (used) => { if (path.length === len) { ans.push([…path]) return; }
for (let i = 0; i < len; i++) { if (used[i]) continue; // if (i > 0 && nums[i] === nums[i-1] && !used[i]) continue; // bug:used[i-1]为false,而不是used[i]才能退出这次循环 if (i > 0 && nums[i] === nums[i-1] && !used[i-1]) continue; path.push(nums[i]); used[i] = true; backtracking(used); path.pop(); used[i] = false; } } backtracking([]); return ans; }; ``` | | —- |
20220425, 3min
|
```javascript
/**
- @param {number} capacity */ // 22:09 -> 22:12 var LRUCache = function(capacity) { this.map = new Map(); this.capacity = capacity; };
/**
- @param {number} key
- @return {number} */ LRUCache.prototype.get = function(key) { if (this.map.has(key)) { const val = this.map.get(key); this.map.delete(key); this.map.set(key, val); return val; } return -1; };
/**
- @param {number} key
- @param {number} value
@return {void} */ LRUCache.prototype.put = function(key, value) { if (this.map.has(key)) { this.map.delete(key);
} this.map.set(key, value);
// if (this.map.size > capacity) { // bug if (this.map.size > this.capacity) { this.map.delete(this.map.keys().next().value) } };
/**
- Your LRUCache object will be instantiated and called as such:
- var obj = new LRUCache(capacity)
- var param_1 = obj.get(key)
- obj.put(key,value) */ ``` | | —- |
20220422,12min
|
```javascript
/**
- @param {number[]} nums
@return {number[][]} */ // 14:05 -> 14:17 // 排序, 循环,回溯 var permuteUnique = function(nums) { // 排序 nums.sort((a, b) => a - b) // bug:这步没有写 let path = []; let ans = [];
const backtracking = (used) => { if (path.length === nums.length) { ans.push([…path]); // ans.push(path.slice()); // return ans; // bug:答案也会对 return; }
for (let i = 0; i < nums.length; i++) { if(used[i]) continue; if(i > 0 && nums[i] === nums[i-1] && !used[i-1]) continue; path.push(nums[i]); used[i] = true; // backtracking[used]; // bug:backtracking是函数,如果写成这样,最后结果为[] backtracking(used); // path.pop(nums[i]); // bug:pop()后没有参数 path.pop(); used[i] = false; } } backtracking([]); // bug:这步忘写了 return ans; }; ``` | | —- |
20220421,8min
|
```javascript
/**
- @param {number[]} nums
@return {number[][]} */ // 15:26 -> 15:34 // 递归,树层剪枝,回溯 var permuteUnique = function(nums) { nums.sort((a, b) => a - b);
let path = []; let result = [];
const backtracking = (used) => { if (path.length === nums.length) { // result = […path]; // bug:值应该放到追加到结果数组中,而不是直接赋值 result.push([…path]); return; } for (let i = 0; i < nums.length; i++) { if (used[i]) continue; // if (i > 0 && nums[i] === nums[i-1] && !used[i]) continue; if (i > 0 && nums[i] === nums[i-1] && !used[i-1]) continue; path.push(nums[i]); used[i] = true; backtracking(used); path.pop(); used[i] = false; } } backtracking([]) return result; }; ``` | | —- |
20220420, 14min
|
```javascript
/**
- @param {number[]} nums
- @return {number[][]}
*/
// 16:58 -> 17:12
var permuteUnique = function(nums) {
nums.sort((a, b) => a - b);
// let used = [];
let result = [];
let path = [];
const backtracing = (used) => {
console.log(‘path:’, path)
if (path.length === nums.length) {
// result.push(path); // bug: result、path指向同一片内存,随着path的改变,原先的push进result的值也会改变,最终得到的就是n个最后的path的值,即[[], []…]
result.push(path.slice());
console.log(‘result:’, result)
return;
}
for (let i = 0; i < nums.length; i++) {
if (used[i]) continue;
if (i > 0 && nums[i] === nums[i - 1] && !used[i-1]) {
} console.log(‘nums[i]:’, nums[i]) path.push(nums[i]); used[i] = true; backtracing(used); path.pop(); used[i] = false; } } backtracing([]); return result; }; ``` 知识点continue;
- result = path.slice()
| | —- |