zoukankan      html  css  js  c++  java
  • 0216. Combination Sum III (M)

    Combination Sum III (M)

    题目

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

    Note:

    • All numbers will be positive integers.
    • The solution set must not contain duplicate combinations.

    Example 1:

    Input: k = 3, n = 7
    Output: [[1,2,4]]
    

    Example 2:

    Input: k = 3, n = 9
    Output: [[1,2,6], [1,3,5], [2,3,4]]
    

    题意

    从1-9这9个数中选取k个数,使其之和正好为n,求出所有这样的组合。

    思路

    排列组合题,使用回溯法很容易求解。


    代码实现

    Java

    class Solution {
        public List<List<Integer>> combinationSum3(int k, int n) {
            List<List<Integer>> ans = new ArrayList<>();
            dfs(n, k, 0, 1, new ArrayList<>(), ans);
            return ans;
        }
    
        private void dfs(int n, int k, int sum, int start, List<Integer> temp, List<List<Integer>> ans) {
            if (temp.size() == k && sum == n) {
                ans.add(new ArrayList<>(temp));
                return;
            }
          
            if (temp.size() >= k || sum >= n) {
                return;
            }
          
            for (int i = start; i <= 9; i++) {
                temp.add(i);
                dfs(n, k, sum + i, i + 1, temp, ans);
                temp.remove(temp.size() - 1);
            }
        }
    }
    

    JavaScript

    /**
     * @param {number} k
     * @param {number} n
     * @return {number[][]}
     */
    var combinationSum3 = function (k, n) {
      let ans = []
      dfs(0, [], 1, ans, k, n)
      return ans
    }
    
    let dfs = function (sum, tmp, begin, ans, k, n) {
      if (tmp.length === k && sum === n) {
        return ans.push([...tmp])
      }
    
      if (tmp.length >= k || sum >= n) {
        return
      }
    
      for (let i = begin; i <= 9; i++) {
        tmp.push(i)
        dfs(sum + i, tmp, i + 1, ans, k, n)
        tmp.pop()
      }
    }
    
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    位运算实现加法运算
    反转字符串
    数组中的逆序对
    矩阵中的路径
    机器人的运动范围
    滑动窗口的最大值
    HTML5全屏浏览器兼容方案
  • 原文地址:https://www.cnblogs.com/mapoos/p/13660382.html
Copyright © 2011-2022 走看看