刷题 DFS2 全排列 : 组素数 (python, java)

刷题 DFS 全排列 : 组素数 (python, java)

https://www.lanqiao.cn/problems/722/learning/

刷题 DFS2 全排列 : 组素数 (python, java)_第1张图片

答案是 : 6

Python

# 条件
import math
arr = [1,9,4,9]

# 全局变量
deduplication  = set()  # 记录所有组合数并去重

isUsed = [False for _ in arr]

arr_new = [0 for _ in arr]  # 记录当前组合,当组合完成后拼接为一个整数

def dfs(num):
    # num 是表示为存储方案arr_new的下标,也可以表示记录当前路径的长度
    # 结束条件
    if num == len(arr):
        target = arr_new[0]*1000 + arr_new[1]*100 + arr_new[2] * 10 + arr_new[3]
        if check(target):
            deduplication.add(target)
    else:
        # 遍历验证所有路径
        for i in range(len(isUsed)):
            if not isUsed[i]:
                arr_new[num] = arr[i]
                isUsed[i] = True
                
                dfs(num+1)
                
                isUsed[i] = False
        

def check(num):
    """
    判断素数
    """
    flag = False
    b = int(math.sqrt(num))
    for i in range(2, b):
        if num % i == 0:
            flag = True
            break
    if flag:
        return True
    else:
        return False
    
if __name__=="__main__":
    dfs(0)
    print(len(deduplication))  # 6

Java

import java.util.HashSet;
// 全排列,验证重复HashSet
public class Main {
	
	static HashSet<Integer> hs = new HashSet();
	static int[] arr = {1,9,4,9};
	static int[] isUsed = new int[arr.length];
	
	static int[] arr2 = new int[arr.length];
	static int cnt = 0;
	
	public static void dfs(int num) {
		if (num == arr.length) {
			//
			int a = arr2[0]*1000 + arr2[1]*100 + arr2[2]*10 + arr2[3];
			// 判断a是否是素数
			int flag=0;
			for (int i = 2; i < (int)Math.sqrt(a); i++) {
				if (a%i == 0) {
					flag=1;
					break;
				}
			}
			if (flag==0) {
				hs.add(a);
			}
			
			
		} else {
			for (int i = 0; i < isUsed.length; i++) {
				if (isUsed[i] == 0) {
					// 状态改变
					arr2[num] = arr[i];
					isUsed[i] = 1;
					
					// 递归
					dfs(num+1);
					// 回溯
					isUsed[i] = 0;
					
				}
			}
		}
	}
	public static void main(String[] args) {
		//
		dfs(0);
		System.out.println(hs.size());
		
	}
}

你可能感兴趣的:(刷题,java,python,深度优先)