3---LeetCode【Palindrome Number】|C语言|总结

来源:互联网 发布:新闻稿用什么软件 编辑:程序博客网 时间:2024/06/05 16:41

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只能跳出最内层循环




原创粉丝点击