给你一个 非负 整数 num
。如果存在某个 非负 整数 k
满足 k + reverse(k) = num
,则返回 true
;否则,返回 false
。
reverse(k)
表示 k
反转每个数位后得到的数字。
示例 1:
输入:num = 443 输出:true 解释:172 + 271 = 443 ,所以返回 true 。
示例 2:
输入:num = 63 输出:false 解释:63 不能表示为非负整数及其反转后数字之和,返回 false 。
示例 3:
输入:num = 181 输出:true 解释:140 + 041 = 181 ,所以返回 true 。注意,反转后的数字可能包含前导零。
提示:
0 <= num <= 105
方法一:暴力枚举
在
时间复杂度 $O(n\times \log n)。其中 num
的大小。
class Solution:
def sumOfNumberAndReverse(self, num: int) -> bool:
return any(k + int(str(k)[::-1]) == num for k in range(num + 1))
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;
}
};
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
}
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;
}
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
}
}