题意:

给一个只含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;
        }
    }
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐