2026-05-01:整數(shù)的鏡像距離。用go語(yǔ)言,給定一個(gè)整數(shù) n,請(qǐng)計(jì)算它與其數(shù)字倒序后的數(shù)之間的差的絕對(duì)值。
其中,倒序后的數(shù)是把 n 的每一位數(shù)字反過(guò)來(lái)得到的新整數(shù)。
請(qǐng)返回這個(gè)絕對(duì)值結(jié)果。
1 <= n <= 1000000000。
輸入: n = 25。
輸出: 27。
解釋?zhuān)?/p>
reverse(25) = 52。
因此,答案為 abs(25 - 52) = 27。
題目來(lái)自力扣3783。
一、分步詳細(xì)執(zhí)行過(guò)程 第一步:程序入口啟動(dòng)
程序從main函數(shù)開(kāi)始運(yùn)行,這是Go語(yǔ)言程序的執(zhí)行起點(diǎn)。
1. 定義變量
n,并賦值為題目給定的輸入值25。2. 調(diào)用核心計(jì)算函數(shù)
mirrorDistance(25),把 25 作為參數(shù)傳入,開(kāi)始計(jì)算鏡像距離。
這個(gè)函數(shù)的作用是:求原數(shù)和反轉(zhuǎn)數(shù)的差的絕對(duì)值,執(zhí)行步驟:
1. 接收傳入的參數(shù):原數(shù)
n = 25。2. 調(diào)用
reverse函數(shù),傳入 25,計(jì)算數(shù)字反轉(zhuǎn)后的結(jié)果,等待函數(shù)返回反轉(zhuǎn)值。3. 拿到反轉(zhuǎn)結(jié)果后,計(jì)算:
原數(shù) - 反轉(zhuǎn)數(shù)。4. 判斷計(jì)算結(jié)果是否小于0:
? 如果小于0,取它的相反數(shù)(也就是絕對(duì)值);
? 如果大于等于0,直接返回結(jié)果。
5. 將最終的絕對(duì)值返回給main函數(shù)。
第三步:執(zhí)行 reverse 函數(shù)(數(shù)字反轉(zhuǎn)核心)
這個(gè)函數(shù)的作用是:把整數(shù)的每一位數(shù)字倒序排列,生成新整數(shù),以輸入 25 為例,步驟:
1. 初始化一個(gè)結(jié)果變量
res,賦值為0,用來(lái)存儲(chǔ)反轉(zhuǎn)后的數(shù)字。2. 進(jìn)入循環(huán):循環(huán)條件是當(dāng)前數(shù)字大于 0,只要數(shù)字沒(méi)處理完就一直循環(huán)。
? 第一次循環(huán)(當(dāng)前數(shù)字=25):
1. 取數(shù)字的最后一位:25 對(duì) 10 取余,得到5;
2. 拼接反轉(zhuǎn)數(shù)字:res = 0*10 + 5,res 變?yōu)?strong>5;
3. 去掉最后一位:25 除以 10(取整數(shù)),數(shù)字變?yōu)?strong>2。
? 第二次循環(huán)(當(dāng)前數(shù)字=2):
1. 取最后一位:2 對(duì) 10 取余,得到2;
2. 拼接反轉(zhuǎn)數(shù)字:res = 5*10 + 2,res 變?yōu)?strong>52;
3. 去掉最后一位:2 除以 10,數(shù)字變?yōu)?strong>0。
3. 循環(huán)結(jié)束(數(shù)字變?yōu)?,不滿(mǎn)足循環(huán)條件)。
4. 將最終的反轉(zhuǎn)結(jié)果52返回給mirrorDistance函數(shù)。
第四步:回到 mirrorDistance 函數(shù)完成計(jì)算
1. 計(jì)算差值:原數(shù) 25 - 反轉(zhuǎn)數(shù) 52 =-27;
2. 判斷差值:-27 小于 0,因此取它的相反數(shù)27;
3. 將結(jié)果 27 返回給
main函數(shù)。
1. 接收
mirrorDistance函數(shù)返回的結(jié)果 27;2. 打印輸出結(jié)果,最終控制臺(tái)顯示:27。
時(shí)間復(fù)雜度取決于數(shù)字反轉(zhuǎn)函數(shù) reverse的循環(huán)次數(shù):
? 循環(huán)執(zhí)行的次數(shù) = 整數(shù)
n的數(shù)字位數(shù)(比如 25 是2位,循環(huán)2次;1234是4位,循環(huán)4次)。? 假設(shè)整數(shù)
n的位數(shù)為k,時(shí)間復(fù)雜度為O(k)。? 題目限定
n ≤ 1000000000,最大位數(shù)是10位,循環(huán)最多執(zhí)行10次,屬于常數(shù)級(jí)時(shí)間復(fù)雜度。
程序運(yùn)行過(guò)程中:
? 只創(chuàng)建了固定數(shù)量的變量(res、diff、n等);
? 沒(méi)有使用數(shù)組、切片、map等動(dòng)態(tài)擴(kuò)容的數(shù)據(jù)結(jié)構(gòu);
? 無(wú)論輸入數(shù)字多大,占用的額外內(nèi)存空間都是固定不變的。
因此總額外空間復(fù)雜度為:O(1)(常數(shù)級(jí)空間復(fù)雜度)。
總結(jié)
1. 完整流程:?jiǎn)?dòng)程序→傳入數(shù)值→反轉(zhuǎn)數(shù)字→計(jì)算差值→取絕對(duì)值→輸出結(jié)果;
2. 時(shí)間復(fù)雜度:O(k)(k為數(shù)字的位數(shù));
3. 額外空間復(fù)雜度:O(1)。
package main
import (
"fmt"
)
func reverse(n int)int {
res := 0
for n > 0 {
res = res*10 + n%10
n /= 10
}
return res
}
func mirrorDistance(n int)int {
diff := n - reverse(n)
if diff < 0 {
return -diff
}
return diff
}func main() {
n := 25
result := mirrorDistance(n)
fmt.Println(result)
}
Python完整代碼如下:
# -*-coding:utf-8-*-
def reverse(n: int) -> int:
res = 0
while n > 0:
res = res * 10 + n % 10
n //= 10
return res
def mirror_distance(n: int) -> int:
diff = n - reverse(n)
return -diff if diff < 0else diff
def main():
n = 25
result = mirror_distance(n)
print(result)if __name__ == "__main__":
main()
C++完整代碼如下:
using namespace std;
int reverse(int n) {
int res = 0;
while (n > 0) {
res = res * 10 + n % 10;
n /= 10;
}
return res;
}
int mirrorDistance(int n) {
int diff = n - reverse(n);
if (diff < 0) {
return -diff;
}
return diff;
}int main() {
int n = 25;
int result = mirrorDistance(n);
cout << result << endl;
return0;
}
我們相信人工智能為普通人提供了一種“增強(qiáng)工具”,并致力于分享全方位的AI知識(shí)。在這里,您可以找到最新的AI科普文章、工具評(píng)測(cè)、提升效率的秘籍以及行業(yè)洞察。 歡迎關(guān)注“福大大架構(gòu)師每日一題”,發(fā)消息可獲得面試資料,讓AI助力您的未來(lái)發(fā)展。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.