作者ZooseWu (動物園 公告)
標題Re: [閒聊] 每日LeetCode
時間2023-11-21 11:21:02
1814. Count Nice Pairs in an Array
給你一串陣列
陣列裡面都是正整數
然後有一個顛倒數rev
例如123的顛倒數rev(123)是321
120的顛倒數rev(120)是21
有兩個數a,b
如果rev(a) + b = a + rev(b)
則a與b則可以配成一對
求陣列內的數可能配對的數量
Intuition:
這一題我原本想的思路是錯的
寫半天解決了大部分的case之後有少數case沒辦法找出來
Approach:
我們透過交換率可以知道
rev(a) + b = a + rev(b) => a - rev(a) = b - rev(b)
所以只要兩個數
他們和自己的顛倒數差相等就可以配一對
我們只要用map把所有顛倒數差相等的放一起
然後Cn取2就後累加就能得到答案
TS Code:
const mod = 1000000007
function getReverse (num: number): number {
const n = num
let reverse = 0
while (num > 0) {
reverse *= 10
reverse += num % 10
num = Math.floor(num / 10)
}
return reverse
}
function countNicePairs (nums: number[]): number {
const diffMap = new Map<number, number>()
for (let i = 0; i < nums.length; i++) {
const diff = getReverse(nums[i]) - nums[i]
diffMap.set(diff, (diffMap.get(diff) ?? 0) + 1)
}
let result = 0
for (const value of diffMap.values()) {
result = (result + value * (value - 1) / 2) % mod
}
return result
}
--
※ 發信站: 批踢踢實業坊(web-ptt.org.tw), 來自: 114.32.229.33 (臺灣)
※ 文章網址: https://web-ptt.org.tw/Marginalman/M.1700536865.A.FC8
推 SecondRun: 大師 11/21 11:28
推 loyou: 看了好多天的每日code文 所以程式設計=解答數學問題的? 11/21 11:35
→ twosheep0603: 刷題才是 11/21 11:39