java - 使用java方法计算python中列表的所有子集

标签 java python algorithm backtracking

我正在解决一些面试问题,其中一个使用回溯的经典问题是计算列表的幂集(所有子集)。我有针对该问题的 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/

相关文章:

java - 在 JBoss 5(或 Tomcat 5.5)中禁用 'localhost' 主机

java - 使用 CXF 和 Tomcat 的 WSDL 导入位置

java - 在 Java 中打开现有文件并关闭它。

python - Keras ImageDataGenerator 重新缩放参数如何工作?

android - 算法数据同步(SQLite到在线数据库)

algorithm - 圆上不相交弦

java - 忽略单元测试的 Jackon JsonProperty 访问

python - 超大文件的优化处理

python - 捕获数字列的新列中是否存在 NA

c++ - boost::mpl::vector - 获取类型的基本偏移量