题目
今天在leetcode上看到一道题:leetcode.cn/circle/disc…
题目就是:数组A中给定可以使用的1~9的数,返回由A数组中的元素组成的小于n的最大数。
思路
一开始没有思路,一看下面的评论,回溯,😯,这样,那能写出来,理了下思路,其实就是找出集合中的所有全排列,跟x比较,记录最大值。
function getMaxVal(arr, limit) {
let used = [];
let max = 0;
let strLimit = '' + limit;
let limitLen = strLimit.length;
function getPath(val, level) {
if (val < limit && val > max) {
max = val;
}
if (level === limitLen) {
return;
}
for (let i = 0; i < arr.length; i++) {
// if (!used[i]) {
let cur = arr[i];
let origin = val;
val = val * 10 + cur;
used[i] = true;
getPath(val, level + 1);
used[i] = false;
val = origin;
// }
}
}
getPath(0, 0);
return max;
}
getMaxVal([1, 2, 4, 9], 2538);
getMaxVal([1, 2, 4, 9], 1111);
getMaxVal([1, 2, 4, 9], 11111);
getMaxVal([1, 2, 4, 9], 99999);
但是上面的是不是没有任何减枝操作?如何进行减枝?