python_day_5:20180720

78. 子集
 
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
思路:获得一个nums作为列表,n=len(nums)相当于这个列表中元素的个数。n个元素的列表,它的组合一共有2**n种。这时联想到二进制表达。遍历2**n,把每个值转化为二进制,就可以代表原来的nums中,相应位置的元素要不要在结果列表中体现。
class Solution:
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        binnums=2**len(nums)
        result=[]
        for i in range(binnums):
            mask=str(bin(i)).replace('0b','')
            mask='0'*(len(nums)-len(mask))+mask
            thisone=[]
            for j in range(len(mask)):
                if mask[j]=='1':
                    thisone.append(nums[j])
            result.append(thisone)
        return result
59. 螺旋矩阵 II
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
思路:这么恶心的题目,我已经不想多说了,做到想吐!可能是我算法不够好,感觉这一段就是代码届的苦力代表。
class Solution(object):
    def generateMatrix(self, n):
        result=[[0 for i in range(n)] for j in range(n)]
        numlist=[]
        for i in range(1,n**2+1):
            numlist.append(i)  
        k=0
        while len(numlist)>0:
            for item in range(k,n-k):
                result[k][item]=numlist[item-k]
            numlist=numlist[n-2*k:]
            for item in range(k+1,n-k):
                result[item][-k-1]=numlist[item-1-k]
            numlist=numlist[n-1-2*k:]
            for item in range(k+1,n-k):
                result[-k-1][-1-item]=numlist[item-1-k]
            numlist=numlist[n-1-2*k:]
            for item in range(k+1,n-1-k):
                result[-item-1][k]=numlist[item-1-k]
            numlist=numlist[n-2-2*k:]
            k+=1
            
        return result
原文地址:https://www.cnblogs.com/codeinpy/p/9344582.html