第一次尝试
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。LeetCode链接
- 方法:递归法,令 val 等于 x,保留数字,将数字 x 的个位取出,然后将数字 x 除以 10,直到数字等于零为止,此时开始往回递归,用每一次得到的个位数字,和 val 的个位比较,然后将 val 除以 10,如果比较结果相等,则返回 true,继续往回递归,如果比较的结果不相等,则返回 false;
- 需要注意的是,我们需要来判断返回的结果,否则就会出错,如果返回的结果是 true,则继续递归,否则直接返回 false;另外我们可以先排除一些绝对不是回文数的数字,例如:负数、个位为零的数字;
bool fun(int x, int* val){
//如果 x 等于 0,则返回递归
if(x == 0){
return true;
}
//取出 x 的每个个位
int m = x % 10;
//并将 x 除以 10
x /= 10;
//如果返回的结果是 false,那么就不需进行下去,直接返回false
if(!fun(x, val)){
return false;
}
//取出准备好的副本的个位数字
int n = (*val) % 10;
(*val) /= 10;
//二者比较,如果相等返回true
if(n == m){
return true;
}
//不相等返回false
return false;
}
bool isPalindrome(int x){
//排除不可能是回文数的数字
if(x < 0 || (x % 10 == 0 && x != 0)){
return false;
}
int val = x;
//开始递归
return fun(x, &val);
}