ETH官方钱包

前往
大廳
主題

LeetCode - 2698. Find the Punishment Number of an Integer 解題心得

Not In My Back Yard | 2024-07-25 12:00:14 | 巴幣 0 | 人氣 54

題目連結:


題目意譯:
給定一個正整數 n,回傳 n 的懲罰數(Punishment Number)。

n 的懲罰數定義為所有滿足以下條件的整數 i 之平方值總和:
    1 ≦ i ≦ n、
    i × i 的十進位表示法可以被分切成若干個連續子字串使得這些字串作為整數相加時等於 i。

限制:
1 ≦ n ≦ 1000



範例測資:
範例 1:
輸入: n = 10
輸出: 182
解釋: 有 3 個整數 i 滿足條件:
- 1 因為 1 × 1 = 1
- 9 因為 9 × 9 = 81 而 81 可以分切成 8 + 1。
- 10 因為 10 × 10 = 100 而 100 可以分切成 10 + 0。
因此,10 的懲罰數為 1 + 81 + 100 = 182。

範例 2:
輸入: n = 37
輸出: 1478
解釋: 有 4 個整數 i 滿足條件:
- 1 因為 1 × 1 = 1
- 9 因為 9 × 9 = 81 而 81 可以分切成 8 + 1。
- 10 因為 10 × 10 = 100 而 100 可以分切成 10 + 0。
- 36 因為 36 × 36 = 1296 而 1296 可以分切成 1 + 29 + 6。
因此,37 的懲罰數為 1 + 81 + 100 + 1296 = 1478。


解題思維:
直接窮舉即可(甚至不需要建表)。而對於單一一個 i × i 之值同樣也是窮舉切割方式並檢查即可(i × i 最長只會是 7 位數,也就是有 2 ^ (7 - 1) 種將數字分割的方式)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作