Description#
Given a non-negative integer num
, return true
if num
can be expressed as the sum of any non-negative integer and its reverse, or false
otherwise.
Example 1:
Input: num = 443
Output: true
Explanation: 172 + 271 = 443 so we return true.
Example 2:
Input: num = 63
Output: false
Explanation: 63 cannot be expressed as the sum of a non-negative integer and its reverse so we return false.
Example 3:
Input: num = 181
Output: true
Explanation: 140 + 041 = 181 so we return true. Note that when a number is reversed, there may be leading zeros.
Constraints:
Solutions#
Solution 1: Brute Force Enumeration#
Enumerate $k$ in the range $[0,.., num]$, and check whether $k + reverse(k)$ equals $num$.
The time complexity is $O(n \times \log n)$, where $n$ is the size of $num$.
1
2
3
| class Solution:
def sumOfNumberAndReverse(self, num: int) -> bool:
return any(k + int(str(k)[::-1]) == num for k in range(num + 1))
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| class Solution {
public boolean sumOfNumberAndReverse(int num) {
for (int x = 0; x <= num; ++x) {
int k = x;
int y = 0;
while (k > 0) {
y = y * 10 + k % 10;
k /= 10;
}
if (x + y == num) {
return true;
}
}
return false;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class Solution {
public:
bool sumOfNumberAndReverse(int num) {
for (int x = 0; x <= num; ++x) {
int k = x;
int y = 0;
while (k > 0) {
y = y * 10 + k % 10;
k /= 10;
}
if (x + y == num) {
return true;
}
}
return false;
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| func sumOfNumberAndReverse(num int) bool {
for x := 0; x <= num; x++ {
k, y := x, 0
for k > 0 {
y = y*10 + k%10
k /= 10
}
if x+y == num {
return true
}
}
return false
}
|
1
2
3
4
5
6
7
8
| function sumOfNumberAndReverse(num: number): boolean {
for (let i = 0; i <= num; i++) {
if (i + Number([...(i + '')].reverse().join('')) === num) {
return true;
}
}
return false;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| impl Solution {
pub fn sum_of_number_and_reverse(num: i32) -> bool {
for i in 0..=num {
if
i +
({
let mut t = i;
let mut j = 0;
while t > 0 {
j = j * 10 + (t % 10);
t /= 10;
}
j
}) == num
{
return true;
}
}
false
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| bool sumOfNumberAndReverse(int num) {
for (int i = 0; i <= num; i++) {
int t = i;
int j = 0;
while (t > 0) {
j = j * 10 + t % 10;
t /= 10;
}
if (i + j == num) {
return 1;
}
}
return 0;
}
|