1. 程式人生 > >華為機試題--迴文數的判定

華為機試題--迴文數的判定

 一、題目描述:

有這樣一類數字,他們順著看和倒著看是相同的數,例如: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

做題感悟: 對於第二種方法的設計思想個人覺得比較精妙,對於開闊思路很有幫助。但相對於第一種而言,更加簡單明瞭。