题目
循环嵌套解法
这种解法是循环嵌套的方法,比较容易理解
代码
import java.util.HashSet;
import java.util.Iterator;
@SuppressWarnings({"all"})
public class Main {
public static void main(String[] args) {
int []arr =new int[]{1,9,4,9};
int sum=0;
HashSet<Integer> hashSet = new HashSet<Integer>();
for (int a=0; a<arr.length; a++) {
for (int b=0; b<arr.length; b++) {
if(a==b) continue;
for (int c=0; c<arr.length; c++) {
if(b==c||a==c) continue;
for (int d=0; d<arr.length; d++) {
if(a==d||b==d||c==d) continue;//这里的abcd是索引!需要考虑两个9,因为可能出现重复数字情况
//重复数字是素数就计算了两次,so不合理,运用HashSet机制(没有重复数据)解决
int result=arr[a]*1000+arr[b]*100+arr[c]*10+arr[d];
hashSet.add(result);//这种属于先去重然后判断
//也可以先判断,然后把是的填入hashset里面,最后hashset的size就是素数个数
}
}
}
}
for(Integer a:hashSet ) {
if(isPrime(a))
sum++;
}
System.out.println(sum);
}
public static boolean isPrime(int result) {
for(int i=2;i<=Math.sqrt(result);i++) {
if(result%i==0){
return false;
}
}
return true;
}
}
输出
6
递归解法
使用递归进行全排列,有一个相对固定的框架
package yuan.lanqiao;
public class Demo01 {
public static void main(String[] args) {
int arr[]=new int[] {1,2,3};
fullsort(arr, 0, arr.length-1);
}
public static void fullsort(int []arr,int start,int end) {//start是我们需要交换的元素下标,end是交换到最后一个元素的下标
if(start==end) {//start=end的时候,这组的全排列完了,输出一下再到下一个循环
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
}
for(int i=start;i<=end;i++)
{
swap(arr,start,i);//交换
fullsort(arr,start+1, end);
swap(arr,start,i);//恢复交换前的样子
}
}
public static void swap(int []arr,int i,int j) {//arr是我们需要操作数组,i和j就是对应下表
int c=arr[i];
arr[i]=arr[j];
arr[j]=c;
}
}
怎么说呢
我也不太懂
不过这个模板可以用