我正在解决一些面试问题,其中一个使用回溯的经典问题是计算列表的幂集(所有子集)。我有针对该问题的 Java 解决方案:
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
Arrays.sort(nums);
backtrack(list, new ArrayList<>(), nums, 0);
return list;
}
private void backtrack(List<List<Integer>> list , List<Integer> {
tempList, int [] nums, int start){
list.add(new ArrayList<>(tempList));
for(int i = start; i < nums.length; i++){
tempList.add(nums[i]);
backtrack(list, tempList, nums, i + 1);
tempList.remove(tempList.size() - 1);
}
}
我正在尝试做同样的事情,但改用 python:
class Solution:
def subsets(self, nums):
lista = []
self.backtrack(lista, [], sorted(nums), 0)
return lista
def backtrack(self, lista, tempList, nums, start):
lista.append(tempList)
for i in range(start, len(nums)):
tempList.append(nums[i])
self.backtrack(lista, tempList, nums, i+1)
tempList.pop()
我打印了 tempList,它似乎按预期工作。我认为的问题是它 lista.append(tempList) 没有按我预期的那样工作。 python 中是否有一些特殊性会产生这种不同的结果?谢谢!
最佳答案
list.add(new ArrayList<>(tempList));
复制 tempList
,您也应该在您的 Python 版本中这样做!
lista.append(tempList[:])
# OR
lista.append(list(tempList)) # which is closer in syntax to your java version
关于java - 使用java方法计算python中列表的所有子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47280207/