題意
起初,你的餘額為 100 元。
給定一個整數 purchaseAmount,表示你將購買的商品價格。
在一家商店中,購買金額將四捨五入到 最接近 的 10 的 倍數 。換句話說,你將支付一個非負金額 roundedAmount,使得 roundedAmount 是 10 的倍數,並且 ∣roundedAmount−purchaseAmount∣ 最小。
如果存在多個最接近的 10 的倍數,則 較大的倍數 是你的實際支出金額。
請你返回一個整數,表示你在購買價值 purchaseAmount 元的商品後剩下的餘額。
注意:在此問題中,0 被視為 10 的倍數。
思路
方法一:按照題意計算
按照題意,我們可以先將購買金額除以 10,得到商數 x,然後計算兩個數值,分別是 cost1=x×10 和 cost2=(x+1)×10,這兩個數值代表最接近 purchaseAmount 的兩個倍數,且 cost1≤purchaseAmount<cost2。比較 purchaseAmount 與這兩個數值的差值,最接近 purchaseAmount 的數值即為實際的購買金額。若兩個數值與 purchaseAmount 的差值相同,則較大的數值即為實際的購買金額。
複雜度分析
- 時間複雜度:O(1)。
- 空間複雜度:O(1)。
1 2 3 4 5 6 7 8
| class Solution: def accountBalanceAfterPurchase(self, purchaseAmount: int) -> int: x = purchaseAmount // 10 cost1, cost2 = x * 10, (x + 1) * 10 if purchaseAmount - cost1 < cost2 - purchaseAmount: return 100 - cost1 else: return 100 - cost2
|
1 2 3 4 5 6 7 8 9 10 11
| class Solution { public: int accountBalanceAfterPurchase(int purchaseAmount) { int x = purchaseAmount / 10; int cost1 = x * 10, cost2 = (x + 1) * 10; if (purchaseAmount - cost1 < cost2 - purchaseAmount) return 100 - cost1; else return 100 - cost2; } };
|
方法二:數學(Math)
事實上,題意就是對購買金額 四捨五入 到十位數。因此可以利用數學計算的方式來取得最接近的倍數。將 purchaseAmount 加上 5 再除以 10 並取整數部分,最後再乘以 10,即可得到 purchaseAmount 四捨五入到十位數後的值。然後用 100 減去這個數值即為答案。
複雜度分析
- 時間複雜度:O(1)。
- 空間複雜度:O(1)。
1 2 3 4
| class Solution: def accountBalanceAfterPurchase(self, purchaseAmount: int) -> int: cost = (purchaseAmount + 5) // 10 * 10 return 100 - cost
|
1 2 3 4 5 6
| class Solution { public: int accountBalanceAfterPurchase(int purchaseAmount) { return 100 - (purchaseAmount + 5) / 10 * 10; } };
|
寫在最後
Cover photo is generated by @たろたろ, thanks for their work!