天天看點

浩哥的力扣刷題記錄——7. 整數反轉

浩哥的力扣刷題記錄——7. 整數反轉

  • ​​1. 題目​​
  • ​​2. 講解​​
  • ​​3. 思路​​
  • ​​4. 參考代碼​​
浩哥的力扣刷題記錄——7. 整數反轉

1. 題目

官網位址:​​7. 整數反轉 - 力扣(LeetCode) (leetcode-cn.com)​​
浩哥的力扣刷題記錄——7. 整數反轉

2. 講解

題目的意思就是倒着取原始數字,并且排除大于或小于32位整數的情況。

然後将結果輸出即可。

比如我輸入123456,那你輸出654321,

如果是-19962020,那輸出-2026991

3. 思路

這麼一看挺簡單的,因為人的思維可以直接通過倒着看就能直接得到結果。

那麼機器怎麼實作呢?

這就是将人腦的運算過程以一種可重複的實作方式來記錄。

根據題目的要求我們可以清楚知道,這就是不斷取一個數的最後一位,經過進位後存儲,然後再去除最後一位數,進入循環,直到取不到數字為止。

可以參考如下運算過程:

浩哥的力扣刷題記錄——7. 整數反轉

然後就是這麼确定用程式設計語言實作一個數的取最後一位和如何不斷擴大10倍的問題。

4. 參考代碼

public class L0007 {
    public static void main(String[] args) {
        int[] nums = {123, -123, 123456000,123456789, 888999000,-78912300, -1239870089};
        for (int num :nums) {
            System.out.println(new L0007().reverse(num));
        }
    }

    /**
     * 思路:倒着取每一位數字,然後一直*10進行擴大存儲。然後原數字依次去除最後一位。
     * @param num 原始數字
     * @return 反轉後數字
     */
    public int reverse(int num) {
        // 結果存放,必須要大于int,因為反轉有溢出問題。
        long result = 0;
        while (num != 0){
            // *10相當于擴大一位   %10相當于取最後一位數字
            result = result*10 + num%10;
            // 相當于去掉數字的最後一位,比如原數123,執行之後變成12
            num /= 10;
        }

        // 看看是不是超過int最大最小值了
        if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
            return 0;
        }

        return (int)result;
    }
}