输入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]+" ");
}
}
}
}