868. 二进制间距
var binaryGap = function(n) {
let s=n.toString(2)
let res=[0]
let ans=0
for(let i=1;i<s.length;i++){
if(s[i]==='1'){
res.push(i)
ans=ans>i-res[res.length-2]?ans:i-res[res.length-2]
}
}
return ans
};
模板:
const backtracking=function(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}
77. 组合
let result=[]
let path=[]
var combine = function(n, k) {
result=[]
combineHelper(n,k,1)
return result
};
const combineHelper=(n,k,startIndex)=>{
if(path.length===k){
result.push([...path])
return
}
for(let i=startIndex;i<=n;i++){
path.push(i)
combineHelper(n,k,i+1)
path.pop()
}
}
216. 组合总和 III
var combinationSum3 = function(k, n) {
let res=[]
let path=[]
const helper=function(k,n,startIndex,sum){
if(path.length===k && sum===n){
res.push([...path])
return
}
for(let i =startIndex;i<=9;i++){
path.push(i)
sum+=i
helper(k,n,i+1,sum)
sum-=i
path.pop()
}
}
helper(k,n,1,0)
return res
};
17. 电话号码的字母组合
var letterCombinations = function(digits) {
if(digits.length===0)return []
const letters=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
let res=[]
let path=[]
let n=digits.length
const helper=function(n,s,a){
if(path.length===n){
res.push(path.join(''))
return
}
for(let v of letters[s[a]]){
path.push(v)
helper(n,s,a+1)
path.pop(v)
}
}
helper(n,digits,0)
return res
};