leetcode [array] Subsets

题目:
Given a set of distinct integers, nums, return all possible subsets (the power set).

题目翻译:
给一串不同的数字,输出它们的子集

题解:
此题有一个较为简单的方法,即,用二进制串的方式去代表一个一个子集。例如对于[1,2,3],用一个长为3的列表arr去存储二进制串,由于[1,2,3]一共有8个子集,故用0-7对应的二进制串去表示每一个子集。
eg.
0——000——[]
1——001——[3]
2——010——[2]
3——011——[2,3]
4——100——[1]
5——101——[1,3]
6——110——[1,2]
7——111——[1,2,3]

代码解如下:

class Solution(object):
    def subsets(self, nums):
        result=[]
        for num in range(2**len(nums)):
            arr=change(num,len(nums))
            temp=[]
            for i in range(len(nums)):
                if arr[i]:
                    temp.append(nums[i])
            result.append(temp)
        return result

#得到数字num对应的长为len(nums)的二进制串列表           
def change(num,size):
    arr=[0]*size
    i=0
    while num:
        arr[i] = num % 2
        num = num // 2
        i=i+1
    return arr
#提交时不需要交下面的代码,下面为测试代码
nums=[1,2,3]
result=Solution().subsets(nums)
print(result)

输出:

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

猜你喜欢

转载自blog.csdn.net/shu_xi/article/details/80099981