package algorithm.leetcode; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * @author: mayuan * @desc: 组合总和 III * @date: 2018/08/12 */ public class Solution216 { public static void main(String[] args) { Solution216 test = new Solution216(); List> result = test.combinationSum3(3, 7); result.forEach(list -> { for (int n : list) { System.out.print(n); System.out.print(" "); } System.out.println(); }); } public List> combinationSum3(int k, int n) { List> answer = new LinkedList<>(); List oneAnswer = new ArrayList<>(k); dfs(answer, oneAnswer, k, n, 1); return answer; } private void dfs(List> answer, List oneAnswer, int size, int targetSum, int startNumber) { if (0 > targetSum) { return; } if (oneAnswer.size() == size && 0 == targetSum) { answer.add(new ArrayList<>(oneAnswer)); return; } // 依次迭代每个数字 1~9 for (int num = startNumber; num <= 9; ++num) { oneAnswer.add(num); dfs(answer, oneAnswer, size, targetSum - num, num + 1); oneAnswer.remove(oneAnswer.size() - 1); } } }