关于完数我自己学的回溯算法从而自己写出来的一个部分,很开心哈哈哈哈哈。和原题答案不一定完全相同 import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class test5 { public static List<List<Integer>> result = new ArrayList<>(); public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for(int i = 1;i <= n;i++){ LinkedList<Integer> path = new LinkedList<>(); backtracking(0,i,Num(i),path,0); } System.out.println(result); } public static LinkedList<Integer> Num(int num){ LinkedList<Integer> list = new LinkedList<>(); list.add(1); for(int i = 2; i < num;i++){ if(num % i == 0){ list.add(i); } } return list; } public static void backtracking(int sum,int target,LinkedList<Integer> list,LinkedList<Integer> path,int startIndex){ if(sum > target){ return; } if(sum == target){ System.out.println(target); result.add(new ArrayList<>(path)); } for(int i = startIndex;i < list.size();i++){ sum += list.get(i); path.add(list.get(i)); backtracking(sum,target,list,path,i+1); sum -= list.get(i); path.removeLast(); } } }