[LeetCode][JavaScript]Subsets

來源:互聯網
上載者:User

標籤:

Subsets

Given a set of distinct integers, nums, return all possible subsets.

Note:

  • Elements in a subset must be in non-descending order.
  • The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

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

 

 

 

 

全排列。

首先是非遞迴的巧妙解法。

比如題目中的例子[1,2,3]:

一共有8種情況,如果用三位的二進位表示,1代表選,0代表不選,正好就是000到111。

代碼中的padLeft方法把當前的數轉化成長度等於nums.length的二進位字串,位元不足以0補齊。

 1 /** 2  * @param {number[]} nums 3  * @return {number[][]} 4  */ 5 var subsets = function(nums) { 6     nums = nums.sort(sorting); 7     var res = []; 8     for(var i = 0; i < Math.pow(2, nums.length); i++){ 9         var str = padLeft(i, nums.length);10         var tmp = [];11         for(var j = 0; j < str.length; j++){12             if(str[j] === ‘1‘){13                 tmp.push(nums[j]);14             }15         }16         res.push(tmp);17     }18     return res;19     20     function padLeft(num, len){21         var res = "", i = len;22         while(i--) res += ‘0‘;23         var tmp = parseInt(num).toString(2);24         res = res + tmp;25         return res.substring(tmp.length, res.length);26     }27 28     function sorting(a, b){29         if(a > b){30             return 1;31         }else if(a < b){32             return -1;33         }else{34             return 0;35         }36     }37 };

效率很高。

 

 

常規的遞迴解法。

比較難以描述,舉栗子[1,2,3,4]

當遞迴到[1,2]的時候,下一輪的遞迴是[1,2,3]和[1,2,4]。

[1,2,3]又會遞迴到[1,2,3,4]。

當遞迴到[1,3]的時候,下一輪的遞迴是[1,3,4]。

以此類推。

 1 /** 2  * @param {number[]} nums 3  * @return {number[][]} 4  */ 5 var subsets = function(nums) { 6     nums = nums.sort(sorting); 7     var res = [[]], arr = []; 8     for(var i = 0; i < nums.length; i++){ 9         res.push([nums[i]]);10         arr.push({val : [nums[i]], pos : i});11     }12     getSets(arr);13     return res;14 15     function getSets(arr){16         var i, j, tmp, nextArr = [];17         for(i = 0; i < arr.length; i++){18             for(j = arr[i].pos + 1; j < nums.length; j++){19                 tmp = arr[i].val.slice(0);20                 tmp.push(nums[j]);21                 res.push(tmp);22                 nextArr.push({val : tmp, pos : j});23             }24         }25         if(nextArr.length > 0){26             getSets(nextArr);27         }28     }29 30     function sorting(a, b){31         if(a > b){32             return 1;33         }else if(a < b){34             return -1;35         }else{36             return 0;37         }38     }39 }

 

 

 

 

 

 

[LeetCode][JavaScript]Subsets

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.