原题:
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], []]这道题就是生成子集的问题,高中知识,子集个数为2^n个。所以我的思路是0-2^n的循环,然后将十进制数对应到二进制,根据二进制的值对应到某个元素是否在某个子集中。详细代码(代码不好,速度有点慢,leetcode上有大神的代码,估计C语言会快一点?):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其中十进制to二进制的代码,求余求商,求出的结果是从低位到高位(对应学的十进制转化二进制的方式,结果从下到上排列),上边用的时候有些许变化:
n = 12PRint bin(n)while n != 0: print n%2 n = n/2其实python中有十进制到二进制转化的函数: 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.
转化为了字符串,10 - 0b1010,注意0b也是字符串的内容,所以真正的二进制字符串是从索引2开始的。
新闻热点
疑难解答