[LeetCode][JavaScript]Combination Sum III

Combination Sum 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.


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]]

https://leetcode.com/problems/combination-sum-iii/

 





我做到现在AC最快的题目,真的不到1分钟,还是上两题的变通:

http://www.cnblogs.com/Liok3187/p/4526863.html

http://www.cnblogs.com/Liok3187/p/4532064.html

把第二题的代码copy过来,删掉visited,candidates换成一到9,最后加上个数的限制,就好了。

真会玩啊,一个类型翻来覆去,很欢迎Combination Sum IV

 1 /**
 2  * @param {number} k
 3  * @param {number} n
 4  * @return {number[][]}
 5  */
 6 var combinationSum3 = function(k, n) {
 7     var res = [];
 8     var candidates = [1,2,3,4,5,6,7,8,9];
 9     candidates.sort(sorting);
10     bfs(0, -1, []);
11     return res;
12 
13     function bfs(sum, index, tmp){
14         var newTmp = null;
15         if(sum === n && tmp.length === k){
16             newTmp = tmp.concat();
17             res.push(newTmp);
18             return;
19         }else if(tmp.length > k || sum > n || index + 1 >= candidates.length){
20             return; //pruning
21         }
22 
23         for(var i = index + 1; i < candidates.length; i++){
24             newTmp = tmp.concat();
25             newTmp.push(candidates[i]);
26             bfs(sum + candidates[i], i, newTmp);
27         }
28     }
29     function sorting(a, b){
30         if(a > b){
31             return 1;
32         }else if(a < b){
33             return -1;
34         }else{
35             return 0;
36         }
37     }
38 };

 

 

posted @ 2015-05-26 23:24  `Liok  阅读(405)  评论(0编辑  收藏  举报