华为机试题--回文数的判定

 一、题目描述:

有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字。编写一个函数,判断某数字是否是回文数字。
要求实现方法:

public String isPalindrome(long num);

二、 算法分析

        要实现回文数的判定,其核心就是字符串翻转后值相同,一说这大家立马回想到stringbuffer中的reverse方法。是的,没有这个方法可以实现这个功能。

       在此介绍另一种方法,相对来说思想比较复杂。

        1> 初始化一个变量 reverlong为o,用来记录从新生成的数字。

         2>  如果输入的nunber不为零,则reverlong = reverlong * 10 + number % 10. 然后把number = number /10;

             这个语句意思是前面的reverlong为nunber取余后的低位数字,number /10 位 次高位 

            比如 : 1221  (从左到右, 标记位数为 4321 ) 

             第一趟 while: reverlong = 0 * 10 +  1221 % 10 = 1 (最低位 1 ) 

             第二趟: reverlong = 1 * 10 + 122 % 10 =   12 (1,2 位)

    三、算法:

  方法一、

private boolean isPalindrome(long num) {
		boolean flag;
		String numStr = Long.toString(num);
		StringBuffer sb = new StringBuffer(numStr);
		String resultStr =sb.reverse().toString();
		if (resultStr.equals(numStr)) {
			flag = true;
		} else {
			flag = false;
		}
		 return flag;
	}

方法二、

private boolean isPalindrome2(long num) {
		boolean flag = false;
		long temp = num;
		long reverlong = 0l;
		while (num != 0) {
			reverlong = reverlong * 10 + num % 10;
			num = num / 10;
		}
		if(temp == reverlong) {
			flag = true;
		} 
		return flag;
	}

四、测试

package com.albertshao.csi.interview;
/**
 * @author albertshao
 *
 */
public class Main4_1 {

	public static void main(String[] args) {
		Main4_1 m = new Main4_1();
		System.out.println("method 2: " + m.isPalindrome2(1221));
		System.out.println("method 1 : " + m.isPalindrome(2332));

	}
	
	private boolean isPalindrome(long num) {
		boolean flag;
		String numStr = Long.toString(num);
		StringBuffer sb = new StringBuffer(numStr);
		String resultStr =sb.reverse().toString();
		if (resultStr.equals(numStr)) {
			flag = true;
		} else {
			flag = false;
		}
		 return flag;
	}
	
	private boolean isPalindrome2(long num) {
		boolean flag = false;
		long temp = num;
		long reverlong = 0l;
		while (num != 0) {
			reverlong = reverlong * 10 + num % 10;
			num = num / 10;
		}
		if(temp == reverlong) {
			flag = true;
		} 
		return flag;
	}
}

测试结果:

method 2: true
method 1 : true

做题感悟: 对于第二种方法的设计思想个人觉得比较精妙,对于开阔思路很有帮助。但相对于第一种而言,更加简单明了。 


        

 

你可能感兴趣的:(华为,机试)