Java算法题,有带佬看看解决吗,想了一晚上了!

输入n个不相同的数组成不可重复的N位数。
比如:
输入
N=2
n=3
1 2 3
输出
12 21 13 31 23 32
带佬们看看吧,帮不出来真难受


public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("N=");
        int N = scanner.nextInt();
        System.out.print("n=");
        int n = scanner.nextInt();
        if(n < N){
            System.out.println("n 必须大于等于N");
            return;
        }
        int[] nums = new int[n];
        for(int i=0; i<n; i++){
            nums[i] = scanner.nextInt();
        }
        permute(N,nums,new ArrayList<>(),0);
    }

    /**
     * 递归输出
     * @param N
     * @param nums
     * @param currentList
     * @param index
     */
    public static void permute(int N,int[] nums,List<Integer> currentList,int index) {
        if(currentList.size() == N){
            StringBuilder sb = new StringBuilder();
            for(Integer t : currentList){
                sb.append(t);
            }
            System.out.print(sb.toString() + " ");
        }
        for(int i = index; i < nums.length; i++){
            if(currentList.contains(nums[i])){
                continue;
            }
            currentList.add(nums[i]);
            permute(N,nums,currentList,index);
            currentList.remove(currentList.size() - 1);
        }
    }

同学,你看看这个是否满足

输入n个不相同的数组成不可重复的N位数?
那那个1 2 3是啥?

C++实现例子,仅供参考

#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>
#include <vector>

int main() {
  int N, n, x;
  std::vector<int> nums;
  std::cin >> N >> n;
  for (int i = 0; i < n; i++) {
    std::cin >> x;
    nums.push_back(x);
  }
  std::set<std::vector<int>> results;
  do {
    results.insert(std::vector<int>(nums.begin(), nums.begin() + N));
  } while (std::next_permutation(nums.begin(), nums.end()));
  for (auto &&r : results) {
    std::copy(r.begin(), r.end(), std::ostream_iterator<int>(std::cout));
    std::cout << " ";
  }
  std::cout << std::endl;
  return 0;
}
$ g++ -Wall main.cpp
$ ./a.out
2 3
1 2 3
12 13 21 23 31 32
$ ./a.out
3 4
1 2 3 4
123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 

全排列的简化版,使用dfs或者递归解决

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int n = scanner.nextInt();//这个n决定你用几个数去组不重复的数
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.nextInt();
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if(arr[i] != arr[j]){
                    System.out.print(arr[i]*10+arr[j]+" ");
                }
            }
        }
    }