給定一個array名叫nums, 如果nums[i] == nums[j] 而且索引 i < j,我們稱為好的組合,計算出總共有幾組好的組合。
我們使用兩個for迴圈去遍歷所有組合。
程式碼:
def numIdenticalPairs(self, nums: List[int]) -> int:
ans = 0
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if(nums[i]==nums[j]):
ans+=1
return ans
我們透過歸納可以得知以下結果。
[1] = 0
[1,1] = 1
[1,1,1] = 3
[1,1,1,1] = 6
[1,1,1,1,1] = 10
得到公式 n = f(n-1)+n-1 所以我們可以直接計算每個元素在array中重複的次數,則可以得到答案。
程式碼:
def numIdenticalPairs(self, nums: List[int]) -> int:
dict2 = {}
def f(n):
if(n in dict2):
return dict2[n]
elif(n==2):
return 1
elif(n<2):
return 0
else:
dict2[n] = n-1+f(n-1)
return dict2[n]
dict1 = {}
for i in nums:
dict1[i] = dict1.get(i,0)+1
ans = 0
for i in dict1:
if(dict1[i] not in dict2):
dict2[dict1[i]] = f(dict1[i])
ans+=dict2[dict1[i]]
return ans
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up