# 2443. Sum of Number and Its Reverse

## 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:

• 0 <= num <= 105

## 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$.

• 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;
}
}

• 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;
}
};

• class Solution:
def sumOfNumberAndReverse(self, num: int) -> bool:
return any(k + int(str(k)[::-1]) == num for k in range(num + 1))


• 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
}

• function sumOfNumberAndReverse(num: number): boolean {
for (let i = 0; i <= num; i++) {
if (i + Number([...(i + '')].reverse().join('')) === num) {
return true;
}
}
return false;
}


• 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
}
}