LeetCode--整数反转和回文数

7、整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

class Solution {
        public int reverse(int x) {
        long temp = 0;
        while(x != 0){
            int pop = x % 10;
            temp = temp * 10 + pop;
            if(temp > Integer.MAX_VALUE || temp < Integer.MIN_VALUE){
                return 0;
            }
            x /= 10;
        }
        return (int)temp;
    }
}

思路:根据题目要求我们需要将数字反转,刚开始的思路是将数字变成字符串最后再变成数字这种方法时间上的消耗会比较大,上面的代码是看过官方讲解明白后写的是直接对数字进行翻转那么在这里我们需要考虑是否翻转后的数字太大或太小造成溢出。下面以123为例子进行解释:要将一个数反转我们要先对其进行求余123%10==3,在写一个量用来存储反转后的数字 就是上面代码中的temp = temp * 10 + pop,在这里需要判断反转后的数字是否太大或者太小,接着在对其进行除10运算(以便除去已经得到的最末尾的数字)。
力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-integer

9、回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。


public class test1 {
	public static  boolean isPalindrome(int x) {
		if(x<0 || (x%10==0 && x!=0)) {
			return false;
		}
        int temp = 0;
        while(x>temp){
            int prop = x%10;
             temp = temp*10+prop;
            x/=10;
        }
        return x==temp || x==temp/10;
	}
	public static void main(String[] args) {
		System.out.println(isPalindrome(12321));
	}
}

注:放在一起写呢是觉得这两个题有很大的相似地方,大家可以仔细观察。
思路:判断回文跟字符反转很像我们再加判断是否是相等即可,但是中间很多小细节不容忽视。首先负数和翻转后开头为零的数我们都返回false,在正数时我们要考虑翻转后数字很大的问题,在这里我们只反转一半数字再跟数字x进行比较,如何判断是一般数字呢我们这里用如果反转后的数字大于原数字说明已经反转一般数字了,最后为什么返回 x == temp || x ==temp/10?我们这里要考虑我们反转的这个数字是否是奇数,如果是奇数我们就要用temp/10来去掉中间的那位数字;

力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-number

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值