zoukankan      html  css  js  c++  java
  • Combinations

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

    For example,
    If n = 4 and k = 2, a solution is:

    [
      [2,4],
      [3,4],
      [2,3],
      [1,2],
      [1,3],
      [1,4],
    ]
    

    Analyse:

    Backtracking. For each number i from 1...n, choose i and fix it, for i + 1...n, do the same thing until the temp vector's size equals to k. Be cautious that we can't use depth == k as the condition, because the depth is always changing and the amount of numbers we want to pick up is no larger than n. So the depth information is not accurate. Suppose k = 3, n = 8, and we encounter 1, 2, 8 as the temp vector, the depth is 8 while it doesn't equals to k. However, we can intuitively realize that this vector should be placed into the result. 

    Runtime: 12ms
     1 class Solution {
     2 public:
     3     vector<vector<int>> combine(int n, int k) {
     4         vector<vector<int> > result;
     5         if(n < k || n <= 0) return result;
     6         
     7         vector<int> temp;
     8         helper(result, temp, n, k, 1);
     9         return result;
    10     }
    11     
    12     void helper(vector<vector<int> >& result, vector<int>& temp, int n, int k, int depth){
    13         if(temp.size() == k){
    14             result.push_back(temp);
    15             return;
    16         }
    17         
    18         for(int i = depth; i <= n; i++){
    19             temp.push_back(i);
    20             helper(result, temp, n, k, i + 1);
    21             temp.pop_back();
    22         }
    23     }
    24 };
  • 相关阅读:
    数据库连接单例模式
    魔术方法
    序列化与反序列化
    设计模式
    类的自动加载
    错误处理
    匿名类--php7.0以上
    OpenCV中HSV颜色模型及颜色分量范围
    Opencv 轮廓提取
    opencv 二值化_OpenCV二值图像案例分析精选 | 第二期
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4873391.html
Copyright © 2011-2022 走看看