如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的
题号:90
//递归回溯不停的选择,剪枝去掉重复解
var subsetsWithDup = function (nums) {
//排序的目的让相同元素放在一起
nums.sort((a, b) => {
return a - b
})
let result = [[]],path = []
let helper = (left, right) => {
if (left > right) {
return
}
//记录上一次遍历的元素,这次和上次一样就调过
let preEle = null
for (let i = left; i <= right; i++) {
if (i == left) {
preEle = nums[left]
} else {
if (preEle == nums[i]) {
continue
} else {
preEle = nums[i]
}
}
//开始处理当前节点
path.push(nums[i])
//保存一个结果
result.push(path.slice())
//进行下一层检索
helper(i + 1, right)
//恢复路径
path.pop()
}
}
helper(0,nums.length - 1)
return result
};
题号:78
//回溯基本题
var subsets = function (nums) {
let result = [[]],path = []
let helper = (left) => {
if (left >= nums.length) {
return
}
for (let i = left; i < nums.length; i++) {
path.push(nums[i])
result.push(path.slice())
helper(i + 1)
path.pop()
}
}
helper(0)
return result
};
题号:274
var hIndex = function (citations) {
citations.sort((a,b) => {
return a - b
})
let len = citations.length, result = 0
//此题一开始有误解,我以为只有一个符合条件的h
//实际是可能有多个取最小的
for (let i = len - 1; i >= 0; i--) {
if (citations[i] >=(len - 1 - i + 1)) {
result = (len - 1 - i + 1)
}
}
return result
};