概述
Determine whether an integer is a Palindrome. Do this without extra space.
问题分析:
判断一个整数是否为回文数,并且不能使用额外的空间。
什么是回文数?
将自然数的各个数字反向排列得到的数与该自然数相等,则称该自然数为回文数。
因为自然数只包括从0开始的整数,所以负数不是回文数,最小的回文数是0,其他有1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, …等。
不适用额外空间?
那是否是直接返回对 x 的数学运算呢??
思来想去也没想到什么好的解法,只好参考Code_Ganker的代码:http://blog.csdn.net/linhuanmars/article/details/21145231
算法思路:
1. 先排除 x 为负数的情况;
2. 获得 x 的位数信息,用div代替;
3. 循环,每次判定 x 最高位和最低位的数字是否相等;若不相等,则立即结束,return false;若相等,则去掉 x 的最高位和最低位;继续循环,直到 x = 0,终止循环;
4. return true。
思考:
1. Do this without extra space.是什么意思?
2. 不用任何额外空间的方法:https://discuss.leetcode.com/topic/97988/a-solution-without-any-extra-space-but-10-if-else-and-87-lines
该代码与下面的算法思路是一样的,但是没有声明任何变量,这样计算过程会产生中间变量么?这样就没有使用任何额外空间吗?
bool isPalindrome(int x) {
if (x <0)
return false;
int div = 1;
while (div <= x/10)
div *= 10;
while (x != 0) {
if (x/div != x%10) {
return false;
}
x = (x%div)/10;
div /= 100;
}
return true;
}
1. 回文数
2. bool类型 ----> C99标准引入
3. 整数除法和取余的灵活运用,整数除法可以获得数据的高位数字
4. return ----> 函数声明为什么类型,就返回什么类型,除void外都必须return;return后面的语句不会执行,可用来结束程序。
5. while循环比较好用啊貌似
6. break只能跳出最内层循环
最后
以上就是无心睫毛为你收集整理的3---LeetCode【Palindrome Number】|C语言|总结的全部内容,希望文章能够帮你解决3---LeetCode【Palindrome Number】|C语言|总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复