天天看點

9. 回文數問題描述思路核心代碼運作效果擴充思路運作效果完整源代碼運作截圖

問題描述

  • 給你一個整數 x ,如果 x 是一個回文整數,傳回 true ;否則,傳回 false 。
  • 回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
例如,121 是回文,而 123 不是。

來源:力扣(LeetCode)

連結:https://leetcode.cn/problems/palindrome-number

著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

思路

按照題目的邏輯,我們很容易想到的就是用兩個指針分别指向首、尾元素,判斷所指元素是否相等,然後指針分别向後移與向前移。現在的問題在于,題目給的參數為int型,如果要實作上述操作,那操作對象就需要是數組或字元串形式。我們這裡選取字元串來進行操作

将int轉換為String類型方法:

法1:String str = String.valueOf(x);  
法2:String s = Integer.toString(x);
           

x為int型的變量,我們通過使用valueOf或toString都能達到我們的目的

第一步完成之後,我們就可以直接完成代碼了

核心代碼

public static boolean isPalindrome(int x) {
        String str = String.valueOf(x);
        //String s = Integer.toString(x);
        int n = str.length();
        for (int i = 0, j = n - 1; i < str.length() / 2; i++, j--) {
            if(str.charAt(i) != str.charAt(j)){
                return false;
            }
        }
        return true;
    }
           

代碼解釋

i用于從前往後周遊,j從後往前周遊,然後逐次比較二者所指的元素,隻要出現一對不相等,那我們就可以直接return false;如果循環結束都沒有進入if語句,那就證明是回文數,我們直接return true。

注:此處的循環結束條件并不是str.length,觀察回文數我們可以知道,回文數是關于中間那一個元素(n為奇數)或關于中間那一對(n為偶數)對稱的,是以我們隻要周遊到中間就好

如:12321(奇)、123321(偶)
           

運作效果

9. 回文數問題描述思路核心代碼運作效果擴充思路運作效果完整源代碼運作截圖

擴充思路

還有一種辦法就是我們對x進行逆序操作,然後判斷逆序後的x與原來的x是否相等即可,Java有一個StringBuffer類,裡面有一個reverse方法,可以完成逆序操作。核心代碼如下:

public static boolean isPalindrome_reverse(int x) {
        String str = Integer.toString(x);//将x轉換為字元串
        StringBuffer re = new StringBuffer(str);
        String s = re.reverse().toString();//完成逆序,并且轉換為String類型
        if (str.equals(s)){
            return true;
        }else{
            return false;
        }
    }
           

運作效果

9. 回文數問題描述思路核心代碼運作效果擴充思路運作效果完整源代碼運作截圖
對比兩個方法占用的時間與空間,我們可以看出,二者都差不多,大家選一個自己習慣的或者容易了解的方法就行

完整源代碼

package com.practice;


public class Palindrome_number {
    public static void main(String[] args) {
        int x = 123321;
        System.out.println(isPalindrome(x));
        System.out.println(isPalindrome_reverse(x));
    }

    public static boolean isPalindrome_reverse(int x) {
        String str = Integer.toString(x);//将x轉換為字元串
        StringBuffer re = new StringBuffer(str);
        String s = re.reverse().toString();//完成逆序,并且轉換為String類型
        if (str.equals(s)){
            return true;
        }else{
            return false;
        }
    }

    public static boolean isPalindrome(int x) {
        String str = String.valueOf(x);
        int n = str.length();
        for (int i = 0, j = n - 1; i < str.length() / 2; i++, j--) {
            if (str.charAt(i) != str.charAt(j)) {
                return false;
            }
        }
        return true;
    }
}

           

運作截圖

9. 回文數問題描述思路核心代碼運作效果擴充思路運作效果完整源代碼運作截圖