該演算法遵循遞回方法,將陣列分為兩部分:
- 在第一次遞回中,第一部分被忽略
- 在第二部分中添加了第一部分
C 代碼(作業正常)
class Solution {
public:
vector<vector<int>> result;
void get_set(vector<int>& nums, vector<int> res, int index=0)
{
if(index == nums.size())
{
result.push_back(res);
return;
}
int top = nums[index ];
get_set(nums, res, index);
res.push_back(top);
get_set(nums, res, index);
}
vector<vector<int>> subsets(vector<int>& nums)
{
vector<int> res;
get_set(nums, res);
return result;
}
};
Python 代碼
class Solution:
def __init__(self):
self.result = [[]]
def get_subsets(self, arr, temp=[], index=0):
if(index==len(arr)):
self.result.append(temp)
return
top = arr[index]
index =1
self.get_subsets(arr, temp, index)
temp.append(top)
self.get_subsets(arr, temp, index)
def subsets(self, nums: List[int]) -> List[List[int]]:
self.get_subsets(nums)
return self.result
uj5u.com熱心網友回復:
在 C 版本中,res是一個按值引數,因此在每次呼叫中都會制作一個向量的副本。Python 傳遞對串列的參考,因此您temp在整個演算法中不斷修改同一個串列。進行遞回呼叫時傳遞一個副本。
的初始值中也不需要空的嵌套串列self.result。C 版本以空向量開頭。
class Solution:
def __init__(self):
self.result = []
def get_subsets(self, arr, temp=None, index=0):
if temp is None:
temp = []
if(index==len(arr)):
self.result.append(temp)
return
top = arr[index]
index =1
self.get_subsets(arr, temp.copy(), index)
temp.append(top)
self.get_subsets(arr, temp.copy(), index)
def subsets(self, nums: List[int]) -> List[List[int]]:
self.get_subsets(nums)
return self.result
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513849.html
標籤:PythonC 算法递归
