LeetCode009 回文数 Java实现

题目:

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

示例1:

输入: 121
输出: true

示例2:

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

示例3:

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

解题思想:

  1. 如果一个数是负数,第一位是“-”号,那么它一定不是回文数;
  2. 0是回文数;
  3. 除0外所有10的整数倍都不是回文数,因为数字的第一位不能为0;
  4. 如果一个回文数的位数为偶数,那么它前面一半的数字等于后面一半的数字反写,例如789987,前面一半是789,后面一半是987,反写则是789,所以相等;
  5. 如果一个回文数的位数为奇数,那么它前\frac{n-1}{2}的数字,等于剩余数字反写,再除以10取整,例如78987,前\frac{n-1}{2}个数字为78,剩余的数字为987,反写为789,除以10取整为78,所以相等;
  6. 算法的核心就是比较一个数的前半部分和后半部分,前半部分可以通过对原数字不断除10取整得到,后半部分的数字可以通过对10取余在反写得到,例如483648,除10,得48364,余8;再除10,得483,余4,前半部分为483,后半部分为8*10+4=84;再除10,得483,余6,前半部分为483,后半部分为(8*10+4)*10+6=846;
  7. 当后半部分的数字大于前半部分的数字时,就到了原数字的一半,算法结束。

 代码实现

/**
 * @author Zqllz
 * 2018年7月24日
 */

import java.util.Scanner;

public class LeetCode009 {
	public static void main(String[] args) {
		
		//控制台输入方法
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个整数:");
		int num = sc.nextInt();
		boolean f = isPalindorome(num);
		System.out.println(f);
	}

	public static boolean isPalindorome(int x) {
		boolean flag = false;
		//0是回文数,且除0外10的整数倍一定不是回文数
		if (x<0 || (x%10==0 && x!=0)) {
			return flag;
		}
		
		int tmp = 0;
		//将原数字除 10取整,余数乘上 10相加
		//当原始数小于反转后的数字时,就到了一半的位数
		while(x>tmp) {
			tmp = tmp*10 + x%10;
			x /= 10;
		}
		
		//(x==tmp)对应数字位数为偶数,(x==tmp/10)对应数字位数为奇数
		if(x == tmp || x == tmp/10) {
			flag = true;
		}
		
		return flag;
	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值