数位dp
flag 表示,存不存在从最前面的位,跑到最后面的位,仍然能和原数打平手的局面。所有比较大小的数位 dp 都摆脱不了三种局面的判断:目前位数已经足够大于、目前位数足够判断小于、目前位数打平手需要往下看
/**
* @param {string[]} digits
* @param {number} n
* @return {number}
*/
const atMostNGivenDigitSet = function (digits, n) {
let d = digits.map(Number),res = 0,num = n.toString()
for (let i = 1; i < num.length; i++) {
res += Math.pow(d.length,i)
}
let flag = 1
for (let i = 0; i < num.length; i++) {
let x = +num[i],j = 0
for(;j < d.length;j++){
if(d[j] < x) res += Math.pow(d.length,num.length - 1 - i)
else break
}
if(d[j] === x) continue
flag = 0
break
}
return res + flag
};