• LeetCode OJ:Combination Sum III(组合之和III)


    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.

    Ensure that numbers within the set are sorted in ascending order.

    就是去k个数的和加起来等于n的组合的个数,数字只能取1-9,做法比较简单就是DFS吗,这里不再赘述,我比较喜欢用private变量,这样函数的参数式写出来比较简单:

     1 class Solution {
     2 public:
     3     vector<vector<int>> combinationSum3(int k, int n){
     4         size = k;
     5         target = n;
     6         vector<int> tmpVec;
     7         tmpVec.clear();
     8         ret.clear();
     9         dfs(tmpVec, target, 1);
    10         return ret;
    11     }
    12     void dfs(vector<int>& vec, int left, int start)
    13     {
    14         if(left < 0) return;
    15         if(left == 0 && vec.size() == size){ 
    16             ret.push_back(vec);
    17             return;
    18         }
    19         for(int i = start; i <= 9; ++i){
    20             vec.push_back(i);
    21             dfs(vec, left - i, i + 1);
    22             vec.pop_back();
    23         }
    24     }
    25 private:
    26     vector<vector<int>> ret;
    27     int target;
    28     int size;
    29 };

     java版本的如下所示,方法仍然相同,简单的DFS:

     1 public class Solution {
     2     public List<List<Integer>> combinationSum3(int k, int n) {
     3         List<List<Integer>> ret = new ArrayList<List<Integer>>();
     4         List<Integer> tmp = new ArrayList<Integer>();
     5         dfs(ret, tmp, 0, k, 1, n); 
     6         return ret;  
     7     }
     8     
     9     public void dfs(List<List<Integer>>ret, List<Integer>tmp, int dep, int maxDep, int start, int left){
    10         if(left < 0)
    11             return; //回溯
    12         else if(left == 0){
    13             if(dep == maxDep)
    14                 ret.add(new ArrayList<Integer>(tmp));
    15             return;
    16         }else{
    17             for(int i = start; i <= 9; ++i){
    18                 tmp.add(i);
    19                 dfs(ret, tmp, dep+1, maxDep, i+1, left - i);
    20                 tmp.remove(new Integer(i));
    21             }
    22         }
    23     }
    24 }
  • 相关阅读:
    GCC编绎详解
    GUN C/C++ __attribute__ 用法 转
    rust 参考的资料 转
    Eclipse环境安装rust
    GNU Debugger for Windows----GDB
    minGW cygwin gnuwin32
    tdm-gcc
    GNU tools
    The MinGW and mingw-w64 projects.----GCC
    crosstool-NG
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4895864.html
Copyright © 2020-2023  润新知