代码报错,不知道为什么?
先跳过,以后再来解决它!
class Solution:
def subsetXORSum(self, nums: List[int]) -> int:
def func(a, k): #函数返回值为一个二维列表
#从列表a中选择k个数,返回所有的解决方案
#可以用递归来实现
if k == len(a):
return a
if a == []:
return a
b = a.copy()
val = b[-1]
del b[-1]
# [i.append(x) for i in func(b, k-1)] #选择b[-1]
# func(b, k) #不选b[-1]
return [i.append(x) for i in func(b, k-1)] + func(b, k)
def computeXOR(a):
ans = a[0]
for i in range(1,len(a)):
ans = ans ^ a[i]
return ans
allSeclect = []
for i in range(1, len(nums)+1):
allSeclect += func(nums, i)
res = 0
for i in range(len(allSeclect)):
res += computeXOR(allSeclect[i])
return res
报错信息为:
官方的解答为,
class Solution:
def subsetXORSum(self, nums: List[int]) -> int:
n = len(nums)
res = 0
def dfs(val,idx):
nonlocal res
if idx == n:
res += val
return
dfs(val^nums[idx],idx+1)
dfs(val,idx+1)
dfs(0,0)
return res
思路看懂了,“第idx位选或不选”。但有些不明白的地方,res为什么用nonlocal呢?n为什么不用nonlocal呢?