9.回文数
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1: 输入: 121 输出: true
示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
- 常规解法:先反转再和原数做比较
bool isPalindrome(int x){ int num = x; long res = 0; //注意这里要用long类型的数,有些不是回文数最后的数字可能很大 if(x == 0) return true; else if(x < 0) return false; else{ while(num > 0){ res = res * 10 + num % 10; num = num / 10; } if(res == x) return true; else return false; } }
//JS /** * @param {number} x * @return {boolean} */ var isPalindrome = function(x) { if(x < 0) return false; let num = x, res = 0; while(num != 0){ res = res * 10 + num % 10; num = Math.floor(num / 10); } if(res != x) return false; return true; };
//数字转换成字符串后再双指针遍历 var isPalindrome = function(x) { if(x < 0) return false; let str = ""; str += x; for(let i = 0, j = str.length - 1; i < j; i++, j--) if(str[i] != str[j]) return false; return true; };
补充:判断字符串是否是回文串
- 空间换时间:从尾到头将字符串a赋值给字符串b,再从头开始比较a和b,全部相同则是回文
int isPalindrome1() { int j,i,n; char a[999],b[999]; printf("Please input string: "); scanf("%s",a); //输入字符串 n=strlen(a); //用strlen函数读取字符串长度(长度到\0停止) for(i=0,j=n-1;i<n;i++,j--) //循环将字符串a逆序赋值给b b[j]=a[i]; for(i=0;i<n;i++) { if(b[i]!=a[i]) break; //判断是否回文 } if(i==n) printf("是一个回文数!\n"); //如果从第1位到n都相同 则输出回文数 else printf("不是一个回文数!\n"); return 0; }
- 第i个位置上的字符和第n-1-i位置上的字符做比较
int isPalindrome2(char *str) { int i,n=0,fg=1; //设置标志位 char *p=str; while(*p){ //将指针p置位到字符串末尾,并统计字符数 n++; p++; } for(i=0;i<n/2;i++){ //循环比较字符 if(str[i]!=str[n-1-i]){ fg=0; break; } } return fg; }