学习算法第三题

问题:
判断整数是否是回文。PS:回文:把相同的词汇或句子 ,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。
要求:不能将整数转化成字符串!

示例1:

输入: 121
输出:true
说明:从左到右,显示121;从右到左,显示121;因此为回文。

示例2:

输入: -121
输出:false
说明:从左到右,显示-121;从右到左,显示121-;因此不是回文。

示例3:

输入: 123
输出:false
说明:从左到右,显示123;从右到左,显示321;因此不是回文。

示例4:

输入: 10
输出:false
说明:从左到右,显示10;从右到左,显示01;因此不是回文。

原本的解决方案:

	public boolean oldCode(int x) {
        if(x < 0){
            return false;
        }
        if(x % 10 == 0){
        	return false ;
        }
        int result = 0;
        int xDao = x ;
	    while (x != 0){
	        int tail = x % 10;
	        int newResult = result * 10 + tail;
	        result = newResult; 
	        x = x / 10;
	    }
	    if(result == xDao){
	    	return true;
	    }
        return false;
	}
	
	@Test	//测试
	public void testName() throws Exception {
		int  a = 121121321 ;
		boolean palindrome = oldCode(a);
		System.err.println(palindrome);
	}

输出结果
false

新的优化方案:


	/**
	 * 比较x中的一半数字,不需要处理溢出
	 * @param x
	 * @return
	 */
	public boolean newCode(int x) {
	    if (x<0 || (x!=0 && x%10==0)) return false;
	    int rev = 0;
	    while (x>rev){
	    	rev = rev*10 + x%10;
	    	x = x/10;
	    	System.err.println("x:"+x+"  rev:"+rev);
	    }
	    return (x==rev || x==rev/10);
	}
	
	@Test		//测试
	public void testName() throws Exception {
		int  a = 121121321 ;
		boolean palindrome = newCode(a);
		System.err.println(palindrome);
	}
	

输出结果
false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值