试探回溯法就行,找到所有数,选出小于n的最大数就行了,复杂度没提要求应该能过; public class Main { public static void main(String[] args) { int n=23121; int[] array=new int[] {2,4,9}; System.out.println(find(n, array)); }     public static int find(int n, int[] array) {      int depth=0;      List<Integer> list=new ArrayList<>();      int path=0;      char[] digits=Integer.toString(n).toCharArray();      dfs(n, depth, digits, array, path, list);      int result=0;      Collections.sort(list);      for(int i=0;i<list.size();i++) {      if(list.get(i)>=n) {      result=list.get(i-1);      break;      }      }      return result;     }          public static void dfs(int n, int depth, char[] digits, int[] array, int path, List<Integer> list) {      if(depth==digits.length) {      list.add(path);      return;      }      for (int i = 0; i < array.length; i++) { path = path * 10 + array[i]; dfs(n, depth + 1, digits, array, path, list); path = path / 10; } } }