题目链接:https://www.dotcpp.com/oj/problem1544.html
题目分析:根据题目给定的条件可知,需要在数组{1, 2, 3, 5, 7, 9}中枚举,且组合成的数字的长度为N,每个数字可以多次使用,但是需要保证符合条件的要求(例如数字2393,需要符合2393,239,23,2均为质数)。
dfs的设计思路:每个数字有多次使用,因此不需要设置 visited数组,直接在dfs开一个for循环,然后进行递归,这样可以做到枚举所有的情况,递归出口为选取的数字个数 > N。
递归树如下:
import java.util.*;public class Main{public static boolean judge(long number){if(number == 1){return false;}for(int i = 2; i <= Math.sqrt(number); i++){if(number % i == 0){return false;}}return true;}public static void dfs(int[] nums, int n, int count, long number){if (!judge(number)){ //此处为剪枝操作return;}if(count == n){if(judge(number)){System.out.println(number);}return;}for(int i = 0; i < nums.length; i++){dfs(nums, n, count + 1, number * 10 + nums[i]);}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] nums = {1, 2, 3, 5, 7, 9};dfs(nums, n, 0, 0);}}
