1、整数反转(leetcode no.7)easy 数学

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2, 2 − 1] ,就返回 0。

思路:
用栈?
把整数转化为字符串,再反转字符串?
这两种方式是可以的,但是并不好。
这题主要是一个数学类算法,所以怎么反转?可以去取模,每次以10取模就可以得到最后一个数。而且题目还需要考虑反转之后的整数范围,其实int类型的范围在 -2147483648~ 2147483647 ,那么其实可以提前判断,如果最大数>214748364 就超出范围了;如果最小数< -214748364 也超出了范围;(其实呢:如果我们都知道了int的取值范围,那么它开头的数字肯定是1或者2了,所以下面代码的 result == 214748364 && temp > 7result == -214748364 && temp < -8 可以省略了。

  1. class Solution {
  2. public int reverse(int x) {
  3. int result = 0;
  4. while(x != 0){
  5. //每次取末尾数字
  6. int temp = x % 10;
  7. //判断是否大于最大32位整数
  8. if(result > 214748364 || (result == 214748364 && temp > 7)){
  9. return 0;
  10. }
  11. //判断是否小于最小的32位整数
  12. if(result < -214748364 || (result == -214748364 && temp < -8)){
  13. return 0;
  14. }
  15. result = result * 10 + temp;
  16. x/=10;
  17. }
  18. return result;
  19. }
  20. }

2、判断回文数(leetcode no.9)easy 数学

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。