給你一個整數陣列 nums
。
開始時,選擇一個滿足 nums[curr] == 0
的起始位置 curr
,並選擇一個移動 方向 :向左或者向右。
此後,你需要重複下面的過程:
- 如果
curr
超過範圍[0, n - 1]
,過程結束。 - 如果
nums[curr] == 0
,沿當前方向繼續移動:如果向右移,則 遞增curr
;如果向左移,則 遞減curr
。 - 如果
nums[curr] > 0
:- 將
nums[curr]
減 1 。 - 反轉 移動方向(向左變向右,反之亦然)。
- 沿新方向移動一步。
- 將
如果在結束整個過程後,nums
中的所有元素都變為 0 ,則認為選出的初始位置和移動方向 有效 。
返回可能的有效選擇方案數目。
class Solution: def countValidSelections(self, nums: List[int]) -> int: left_sum = [0 for _ in nums] right_sum = [0 for _ in nums] left_sum[0] = 0 right_sum[0] = 0 for i,n in enumerate(nums): if i>0: left_sum[i] = left_sum[i-1] + nums[i-1] for i,n in enumerate(nums[::-1]): if i>0: right_sum[i] = right_sum[i-1] + nums[::-1][i-1] right_sum = right_sum[::-1] # print(left_sum) # print(right_sum) ans = 0 for i,n in enumerate(nums): # print(i,n) if n==0 and left_sum[i]==right_sum[i]: ans += 2 elif n==0 and abs(left_sum[i]-right_sum[i])==1: ans += 1 return ans