1. 程式人生 > >【LeetCode】40. 組合總和 II 結題報告 (C++)

【LeetCode】40. 組合總和 II 結題報告 (C++)

題目描述:

給定一個數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的每個數字在每個組合中只能使用一次。

說明:

  • 所有數字(包括目標數)都是正整數。
  • 解集不能包含重複的組合。 

示例 1:

輸入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集為:
[
  [1, 7],
  [1, 2, 5],
  [2, 6],
  [1, 1, 6]
]

示例 2:

輸入: candidates = [2,5,2,1,2], target = 5,
所求解集為:
[
  [1,2,2],
  [5]
]

解題方法:

class Solution {
public:
    void compute(int start, int target, vector<int>& tmp, vector<int>& candidates, vector<vector<int>>& ans) {  
        int n = candidates.size();  
        if(target == 0){
            ans.push_back(tmp);  
            return; 
        }
        for(int i = start; i < n; ){  
            if(target > 0){  
                tmp.push_back(candidates[i]);  
                compute(i+1, target-candidates[i], tmp, candidates, ans);  
                tmp.pop_back();
            }  
            else if(target < 0)  
                return;  
            int j = i;
            while(candidates[j] == candidates[i])   j ++;
            i = j;
        }  
    }  
      
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {  
        vector<vector<int>> ans;  
        vector<int> tmp;  
          
        int v;  
          
        sort(candidates.begin(), candidates.end());  
        compute(0, target, tmp, candidates, ans);  
          
        return ans;  
    }      
};

相關推薦

LeetCode40. 組合總和 II 報告 (C++)

題目描述: 給定一個數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的每個數字在每個組合中只能使用一次。 說明: 所有數字(包括目標數)都是正整數。

LeetCode216. 組合總和 III 報告 (C++)

原題地址:https://leetcode-cn.com/problems/combination-sum-iii/submissions/ 題目描述: 找出所有相加之和為 n 的 k 個數的組合。組合中只允許含有 1 - 9 的正整數,並且每種組合中不存在重複的數字。 說明: 所有

LeetCode140. 單詞拆分 II報告 (C++)

原題地址:https://leetcode-cn.com/problems/word-break-ii/description/ 題目描述: 給定一個非空字串 s 和一個包含非空單詞列表的字典 wordDict,在字串中增加空格來構建一個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能

LeetCode166. 分數到小數 報告 (C++)

原題地址:https://leetcode-cn.com/problems/fraction-to-recurring-decimal/description/ 題目描述: 給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。 如果小

LeetCode165. 比較版本號 報告 (C++)

原題地址:https://leetcode-cn.com/problems/compare-version-numbers/description/ 題目描述: 比較兩個版本號 version1 和 version2。 如果 version1 > version2 返回 1,如果 ve

LeetCode164. 最大間距 報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximum-gap/description/ 題目描述: 給定一個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。 如果陣列元素個數小於 2,則返回 0。 示例 1: 輸入: [3,6,9,1

LeetCode93. 復原IP地址 報告 (C++)

原題地址:https://leetcode-cn.com/problems/restore-ip-addresses/description/ 題目描述: 給定一個只包含數字的字串,復原它並返回所有可能的 IP 地址格式。 示例: 輸入: "25525511135" 輸出: ["25

LeetCode85. 最大矩形 報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximal-rectangle/description/ 題目描述: 給定一個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。 示例: 輸入: [   ["1"

LeetCode221. 最大正方形 報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximal-square/submissions/ 題目描述: 在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。 示例: 輸入:  1 0 1 0 0 1

LeetCode218. 天際線問題 報告 (C++)

原題地址:https://leetcode-cn.com/problems/the-skyline-problem/ 題目描述: 城市的天際線是從遠處觀看該城市中所有建築物形成的輪廓的外部輪廓。現在,假設您獲得了城市風光照片(圖A)上顯示的所有建築物的位置和高度,請編寫一個程式以輸出由這些建

LeetCode169. 求眾數 報告 (C++)

原題地址:https://leetcode-cn.com/problems/majority-element/submissions/ 題目描述: 給定一個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ n/2 ⌋ 的元素。 你可以假設陣列是非空的,並且給定的陣列總

LeetCode127. 單詞接龍 報告 (C++)

題目描述: 給定兩個單詞(beginWord 和 endWord)和一個字典,找到從 beginWord 到 endWord 的最短轉換序列的長度。轉換需遵循如下規則: 每次轉換隻能改變一個字母。 轉換過程中的中間單詞必須是字典中的單詞。 說明: 如果不存在這樣的轉

LeetCode299. 猜數字遊戲 報告 (C++)

原題地址:https://leetcode-cn.com/problems/bulls-and-cows/submissions/ 題目描述: 你正在和你的朋友玩 猜數字(Bulls and Cows)遊戲:你寫下一個數字讓你的朋友猜。每次他猜測後,你給他一個提示,告訴他有多少位數字和確切位

LeetCode9. 迴文數 報告 (C++)

判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。示例 1:輸入: 121 輸出: true 示例 2:輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文數。 示例 3:輸入: 10 輸出: fa

LeetCode146. LRU快取機制 報告 (C++)

題目描述: 運用你所掌握的資料結構,設計和實現一個  LRU (最近最少使用) 快取機制。它應該支援以下操作: 獲取資料 get 和 寫入資料 put 。 獲取資料 get(key) - 如果金鑰 (key) 存在於快取中,則獲取金鑰的值(總是正數),否則返回 -1。

LeetCode39. 組合總和 報告 (C++)

題目描述: 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是

LeetCode154. 尋找旋轉排序陣列中的最小值 II 報告 (C++)

原題地址:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/description/ 題目描述: 假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,

LeetCode95. 不同的二叉搜尋樹 II 報告 (C++)

原題地址:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/description/ 題目描述: 給定一個整數 n,生成所有由 1 ... n 為節點所組成的二叉搜尋樹。 示例: 輸入: 3 輸出: [ &n

LeetCode137. 只出現一次的數字 II 報告 (C++)

原題地址:https://leetcode-cn.com/problems/single-number-ii/description/ 題目描述: 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。 說明: 你的演算法應該具有線性

LeetCode229. 求眾數 II 報告 (C++)

原題地址:https://leetcode-cn.com/problems/majority-element-ii/submissions/ 題目描述: 給定一個大小為 n 的陣列,找出其中所有出現超過 ⌊ n/3 ⌋ 次的元素。 說明: 要求演算法的時間複雜度為 O(n),空間複雜度為