diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/README.md b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/README.md new file mode 100644 index 000000000..6c7ef84df --- /dev/null +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/README.md @@ -0,0 +1,41 @@ +# [2698.Find the Punishment Number of an Integer][title] + +## Description +Given a positive integer `n`, return the **punishment number** of `n`. + +The **punishment number** of `n` is defined as the sum of the squares of all integers `i` such that: + +- `1 <= i <= n` +- The decimal representation of `i * i` can be partitioned into contiguous substrings such that the sum of the integer values of these substrings equals `i`. + +**Example 1:** + +``` +Input: n = 10 +Output: 182 +Explanation: There are exactly 3 integers i in the range [1, 10] that satisfy the conditions in the statement: +- 1 since 1 * 1 = 1 +- 9 since 9 * 9 = 81 and 81 can be partitioned into 8 and 1 with a sum equal to 8 + 1 == 9. +- 10 since 10 * 10 = 100 and 100 can be partitioned into 10 and 0 with a sum equal to 10 + 0 == 10. +Hence, the punishment number of 10 is 1 + 81 + 100 = 182 +``` + +**Example 2:** + +``` +Input: n = 37 +Output: 1478 +Explanation: There are exactly 4 integers i in the range [1, 37] that satisfy the conditions in the statement: +- 1 since 1 * 1 = 1. +- 9 since 9 * 9 = 81 and 81 can be partitioned into 8 + 1. +- 10 since 10 * 10 = 100 and 100 can be partitioned into 10 + 0. +- 36 since 36 * 36 = 1296 and 1296 can be partitioned into 1 + 29 + 6. +Hence, the punishment number of 37 is 1 + 81 + 100 + 1296 = 1478 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-punishment-number-of-an-integer +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go index d115ccf5e..134428a52 100755 --- a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func ok(n, target int) bool { + if n == target { + return true + } + base := 10 + for ; base <= n; base *= 10 { + mod := n % base + if ok(n/base, target-mod) { + return true + } + } + return false +} +func Solution(n int) int { + ans := 0 + for i := 1; i <= n; i++ { + x := i * i + res := ok(x, i) + if res { + ans += x + } + } + return ans } diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go index 14ff50eb4..fc39d481a 100755 --- a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 10, 182}, + {"TestCase2", 37, 1478}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }