找出小于n的最大数(字节面试题)
·
题意:
给一个只含1-9的整数数组以及一个整数n,找出由整数数组中数组成的小于n的最大数。
如nums = [9,6,3,5},n = 56449,则输出:56399.
这是一个求组合的题,使用回溯算法进行解决。大体思路如下:首先求可以组成的所有数并和n进行比较。取值条件,当组成的数小于n的时候,取ans和当前组成数的最大值即可。递归出口:当组成的数大于n,则直接return。
代码如下:
public class test02 {
static int ans = 0;
public static void main(String[] args) {
int[] nums = {9,6,3,5};
int n = 56449;
dfs(nums, n, 1, 0);
System.out.println(ans);
}
public static void dfs(int[] nums, int n,int w, int curNum){
if(curNum >= n) return;
if(curNum < n){
ans = Math.max(ans, curNum);
}
for(int i = 0 ; i < nums.length; i++){
curNum += nums[i] * w;
w *= 10;
dfs(nums, n, w, curNum);
w /= 10;
curNum -= nums[i] * w;
}
}
}
更多推荐
所有评论(0)