[Leetcode][python]Subsets/Subsets II/サブセット/サブセットII
4640 ワード
Subsets
テーマの大意
異なる数値からなる集合を与え、その集合のすべてのサブセットを羅列する.
問題を解く構想.
下のコードを参照
コード#コード#
純粋な考え方.
参照先:https://shenjie1993.gitbooks.io/leetcode-python/078%20Subsets.html例を挙げると、集合[1],[1],[1]]の2つのサブセットがあり、その中に1つの要素を追加すると、[1,2]に[[[],[1],[2],[1,2]]の4つのサブセットがあり、1つの要素を新たに追加する際に、元のサブセットに基づいて、原子セットのすべての要素に新しい要素を加えた総集合であることがわかる.各サブセットの要素が降順でないように、まずすべての要素をソートします.
配列問題DFSに沿って
Subsets II
テーマの大意
異なる数値からなる集合を与え、その集合のすべてのサブセットを羅列する.繰り返しがある
問題を解く構想.
前の問題と同様に,重複があると余分なサブセットが生成されるという問題がある.参照先:https://shenjie1993.gitbooks.io/leetcode-python/078%20Subsets.htmlここで例を挙げると、集合[1],[1],[1]]の2つのサブセットがあり、その中に1つの要素を追加すると、[1,2],[1],[2],[1,2]]の4つのサブセットがあり、1つの要素を新たに追加する際に、元のサブセットに基づいて、原子セットのすべての要素に新しい要素を加えた総集合であることがわかる.各サブセットの要素が降順でないように、まずすべての要素をソートします.
コード#コード#
配列問題DFSに沿って
まとめ
純粋な考え方のやり方は明らかに効率が高く、この問題のラベルにはビット演算のやり方があり、暇です.
テーマの大意
異なる数値からなる集合を与え、その集合のすべてのサブセットを羅列する.
問題を解く構想.
下のコードを参照
コード#コード#
純粋な考え方.
参照先:https://shenjie1993.gitbooks.io/leetcode-python/078%20Subsets.html例を挙げると、集合[1],[1],[1]]の2つのサブセットがあり、その中に1つの要素を追加すると、[1,2]に[[[],[1],[2],[1,2]]の4つのサブセットがあり、1つの要素を新たに追加する際に、元のサブセットに基づいて、原子セットのすべての要素に新しい要素を加えた総集合であることがわかる.各サブセットの要素が降順でないように、まずすべての要素をソートします.
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = [[]]
for num in sorted(nums):
result += [item + [num] for item in result]
return result
配列問題DFSに沿って
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
self.result = []
nums.sort()
for i in range(0, len(nums)+1):
self.k = i
self.combineHelper(0, [], nums)
return self.result
def combineHelper(self, length, temp, list_num):
if length == self.k:
self.result.append(temp[:]) #
return
for i, num in enumerate(list_num):
temp.append(num)
self.combineHelper(length+1, temp, list_num[i+1:])
temp.pop()
Subsets II
テーマの大意
異なる数値からなる集合を与え、その集合のすべてのサブセットを羅列する.繰り返しがある
問題を解く構想.
前の問題と同様に,重複があると余分なサブセットが生成されるという問題がある.参照先:https://shenjie1993.gitbooks.io/leetcode-python/078%20Subsets.htmlここで例を挙げると、集合[1],[1],[1]]の2つのサブセットがあり、その中に1つの要素を追加すると、[1,2],[1],[2],[1,2]]の4つのサブセットがあり、1つの要素を新たに追加する際に、元のサブセットに基づいて、原子セットのすべての要素に新しい要素を加えた総集合であることがわかる.各サブセットの要素が降順でないように、まずすべての要素をソートします.
コード#コード#
配列問題DFSに沿って
class Solution(object):
def subsetsWithDup(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = [[]]
nums.sort() # sort() ,sorted() ,
temp_size = 0
for i in range(len(nums)):
start = temp_size if i >= 1 and nums[i] == nums[i - 1] else 0
temp_size = len(result) # result , start
for j in range(start, temp_size):
result.append(result[j] + [nums[i]])
print result
return result
まとめ
純粋な考え方のやり方は明らかに効率が高く、この問題のラベルにはビット演算のやり方があり、暇です.