3783. Mirror Distance of an Integer

練習日期:2026-04-18

難度:Easy

類型:Math

📘 題目敘述

給定一個整數 n

定義它的 mirror distance 為:

  • abs(n - reverse(n))

其中 reverse(n) 表示把 n 的十進位數字反轉後所形成的整數。

請回傳 n 的 mirror distance。

條件限制

  • 1 <= n <= 10^9

🧠 解題思路

我這題的想法很直接,就是先把整數的數字反轉,得到 reverse(n),然後再算它和原本 n 的絕對差。

反轉數字的方法也很標準:

  • 每次取出目前最後一位 now % 10
  • 接到新數字 rev 的後面
  • 再把 now 除以 10,繼續處理下一位

最後把反轉後的數字和原本的 n 做差,取絕對值就是答案。

所有變數

  • rev:反轉後得到的整數
  • now:目前還沒處理完的數字

🪜 主要流程步驟

1. 先準備反轉數字要用的變數

我先開兩個 long long 變數:

  • rev:用來慢慢組出反轉後的數字
  • now:一開始存原本的 n,之後每輪把最後一位去掉

這裡把 n 轉成 long long,是想讓後面做數字操作時更安全。


2. 每次取出最後一位,加到 rev 後面

接著我用一個 while (now > 0) 迴圈,反覆處理目前數字的最後一位。

核心這行是:

rev = rev * 10 + now % 10;

意思是:

  • 先把原本的 rev 往左移一位,也就是乘上 10
  • 再把 now 的最後一位接上去

這樣就能一位一位把反轉數字組起來。


3. 把 now 最後一位去掉,繼續下一輪

每次拿完最後一位之後,我再做:

now /= 10;

這樣 now 的最後一位就被去掉了。

接著下一輪就能繼續處理新的最後一位,直到整個數字都處理完為止。


4. 最後回傳反轉數字和原數字的絕對差

當迴圈結束後,rev 就是反轉後的整數。

所以最後直接回傳:

return abs(rev - n);

也就是 mirror distance 的定義。

⏱️ 複雜度

dn 的位數。

  • 時間複雜度:O(d)
    每次迴圈處理一位數字。
  • 空間複雜度:O(1)
    只用了固定數量的變數。

💻 程式碼實作

class Solution {
public:
    int mirrorDistance(int n) {
        long long rev;
        long long now = 1LL * n;
        while (now > 0) {
            rev = rev * 10 + now % 10;
            now /= 10;
        }
        return abs(rev - n);
    }
};

https://leetcode.com/problems/mirror-distance-of-an-integer/

作者: scottnick
撰寫日期: 2026-04-18
類別:
原文連結: https://scottnick.github.io/cpp-notes/all%20problems/3783-mirror-distance-of-an-integer.html