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