原題:
Given a set of distinct integers, nums, return all possible subsets.
Note: 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], []]這道題就是生成子集的問題,高中知識(shí),子集個(gè)數(shù)為2^n個(gè)。所以我的思路是0-2^n的循環(huán),然后將十進(jìn)制數(shù)對(duì)應(yīng)到二進(jìn)制,根據(jù)二進(jìn)制的值對(duì)應(yīng)到某個(gè)元素是否在某個(gè)子集中。詳細(xì)代碼(代碼不好,速度有點(diǎn)慢,leetcode上有大神的代碼,估計(jì)C語言會(huì)快一點(diǎn)?):class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ length = len(nums) # size of nums result = [] if length == 0: return result for x in xrange(0, 2**length): s = bin(x) sub = [] n = x # decimal to binary for i in xrange(0, length): if n == 0: break else: if n % 2 == 1: sub.append(nums[i]) n = n / 2 result.append(sub) return result其中十進(jìn)制to二進(jìn)制的代碼,求余求商,求出的結(jié)果是從低位到高位(對(duì)應(yīng)學(xué)的十進(jìn)制轉(zhuǎn)化二進(jìn)制的方式,結(jié)果從下到上排列),上邊用的時(shí)候有些許變化:
n = 12PRint bin(n)while n != 0: print n%2 n = n/2其實(shí)python中有十進(jìn)制到二進(jìn)制轉(zhuǎn)化的函數(shù): bin()bin(x)Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns an integer.
轉(zhuǎn)化為了字符串,10 - 0b1010,注意0b也是字符串的內(nèi)容,所以真正的二進(jìn)制字符串是從索引2開始的。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注