華為機試題--迴文數的判定
阿新 • • 發佈:2019-01-22
一、題目描述:
有這樣一類數字,他們順著看和倒著看是相同的數,例如: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
做題感悟: 對於第二種方法的設計思想個人覺得比較精妙,對於開闊思路很有幫助。但相對於第一種而言,更加簡單明瞭。