为什么我的res
变量在递归过程中没有被修改?谢谢你!
# Input [-1,0,3,5,9,12]
# output: -1
# expected: 4
class Solution:
def search(self, nums: List[int], target: int) -> int:
# boundary condition
if not nums:
return -1
res = -1
def binarySearch(nums, left, right):
mid = (left + right) // 2
# find the res, modify the `res` variable
if target == nums[mid]:
global res
res = mid
print(res) ##### print line, res: 4
# base case
if left >= right:
return
if target < nums[mid]:
binarySearch(nums, left, mid-1)
if target > nums[mid]:
binarySearch(nums, mid + 1, right)
binarySearch(nums, 0, len(nums)-1)
return res
声明为res = -1
的变量res
是局部的而不是全局的。行:
global res
res = mid
引用一个全局变量res
,也就是说,如果您在这个类之外调用res
,它将具有所需的值。
您可以实现所需的结果如下:
class Solution:
def search(self, nums: List[int], target: int) -> int:
# boundary condition
if not nums:
return -1
self.res = -1
def binarySearch(nums, left, right):
mid = (left + right) // 2
if target == nums[mid]:
self.res = mid
print(self.res) ##### print line, res: 4
# base case
if left >= right:
return
if target < nums[mid]:
binarySearch(nums, left, mid-1)
if target > nums[mid]:
binarySearch(nums, mid + 1, right)
binarySearch(nums, 0, len(nums)-1)
return self.res
关于pythonglobal
关键字的更多信息在这里。