无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

2026-05-07:給定范圍內平衡整數的數目。用go語言,給定兩個整數 low 和 high,統計在閉區間 [low, high] 內滿足“平衡”條件...

0
分享至

2026-05-07:給定范圍內平衡整數的數目。用go語言,給定兩個整數 low 和 high,統計在閉區間 [low, high] 內滿足“平衡”條件的整數個數。

對某個整數,先要求它至少是兩位數。接著把它的每一位數字按位置從左到右編號,最左邊是第 1 位。將所有在奇數位上的數字相加,得到奇數位數字和;再把所有在偶數位上的數字相加,得到偶數位數字和。如果這兩個和相等,則該整數被稱為“平衡整數”。

最終,你需要返回區間 [low, high] 中所有平衡整數的數量。

1 <= low <= high <= 1000000000000000。

輸入: low = 1, high = 100。

輸出: 9。

解釋:

1 到 100 之間共有 9 個平衡數,分別是 11、22、33、44、55、66、77、88 和 99。

題目來自力扣3791。

平衡整數計數代碼執行過程分步詳解 一、代碼整體執行步驟(分階段) 階段1:基礎邊界過濾

  1. 1. 函數接收lowhigh兩個超大整數(int64類型);

  2. 2. 首先判斷:如果high < 11,直接返回0(因為最小的平衡數是11,沒有符合條件的數);

  3. 3. 把low修正為max(low, 11),排除1-10這些無效數字,縮小計算范圍。

階段2:數字格式化與預處理
  1. 1. 將修正后的lowhigh轉換成字符串

  • ? 目的:方便逐位處理每一位數字(數位DP的核心操作);

2. 計算high的字符串長度n(最大數字的位數):

  • ? 示例中high=100,字符串是"100",長度n=3

3. 計算diffLHhigh的位數 -low的位數,用于后續限制低位數字的枚舉范圍;

4.初始化記憶化數組(memo)

  • ? 二維數組:第一維是當前處理到第幾位(0~n-1),第二維是奇偶位差值的存儲位;

  • ? 作用:緩存已經計算過的狀態,避免重復遞歸,大幅提升效率。

階段3:核心邏輯 —— 數位DFS遞歸(深度優先搜索)

定義遞歸函數dfs,這是數位DP的核心,參數含義:

  • ?i:當前正在處理第i位數字(從0開始,對應數字的最高位);

  • ?diff奇數位和 - 偶數位和的差值(最終diff=0就是平衡數);

  • ?limitLow:布爾值,當前位是否受low的下限約束;

  • ?limitHigh:布爾值,當前位是否受high的上限約束。

遞歸執行流程:

子步驟1:遞歸終止條件

i == n(所有位數處理完畢):

  • ? 判斷diff是否等于0:

    • ? 等于0 → 是平衡數,返回1(計數+1);

    • ? 不等于0 → 不是平衡數,返回0。

子步驟2:記憶化緩存讀取

如果當前不受low和high的數字限制(可以自由枚舉0-9):

  1. 1. 計算記憶數組的下標(將差值偏移為非負數,防止數組越界);

  2. 2. 如果該狀態已經計算過 → 直接返回緩存的結果,不重復計算;

  3. 3. 如果沒計算過 → defer延遲存儲結果,計算完成后寫入緩存。

子步驟3:確定當前位的枚舉范圍

根據limitLowlimitHigh,限制當前位能選的數字:

  • ? 下限lo:受約束時=low對應位的數字,不受約束時=0;

  • ? 上限hi:受約束時=high對應位的數字,不受約束時=9;

  • ? 示例:處理100的百位時,hi只能是1,不能超過high的數字。

子步驟4:枚舉當前位的所有合法數字

循環遍歷從lohi的每一個數字d

  1. 1.更新差值diff

  • ? 第i位是奇數位(i%2=0):diff = diff + d;

  • ? 第i位是偶數位(i%2=1):diff = diff - d;

2.更新約束條件

  • ? 下一位的limitLow= 當前約束 且 當前選的數字=下限;

  • ? 下一位的limitHigh= 當前約束 且 當前選的數字=上限;

3. 遞歸調用下一位,累加所有合法結果。

子步驟5:返回累計結果

將當前位所有枚舉情況的結果求和,返回給上一層遞歸。

階段4:返回最終答案

啟動遞歸dfs(0, 0, true, true)(從第0位開始,初始差值為0,同時受low和high約束),函數返回的就是[low, high]內平衡整數的總數量。

二、針對示例輸入的執行驗證

輸入:low=1,high=100

  1. 1. 過濾:high=100≥11,low修正為11;

  2. 2. 格式化:low="11"(2位),high="100"(3位),n=3;

  3. 3. 遞歸枚舉所有11~100的兩位數、三位數:

  • ? 兩位數(11~99):奇數位=十位,偶數位=個位,十位=個位 → 11、22…99,共9個;

  • ? 三位數(100):奇數位(百位+個位)=1+0=1,偶數位(十位)=0,1≠0 → 不合法;

4. 最終結果=9,與題目輸出一致。

三、時間復雜度 & 額外空間復雜度 1. 時間復雜度

O(位數 × 最大差值 × 10)

  • ? 核心變量:

  1. 1. 數字最大位數n:101?對應15位

  2. 2. 奇偶位最大差值:每位最大9,總差值≤15×9=135;

  3. 3. 每位枚舉數字:0~9共10種選擇;

? 總計算量:15 × 135 × 10 =20250(常數級極小計算量);

? 本質:O(1) 常數時間復雜度(因為位數固定最大15,無變量級增長)。

2. 額外空間復雜度

O(位數 × 最大差值)

  • ? 核心占用:記憶化數組memo

  • ? 大小:15(位數) × 135(最大差值)=2025個int64元素;

  • ? 遞歸棧空間:最大深度=數字位數=15,可忽略;

  • ? 本質:O(1) 常數空間復雜度

總結
  1. 1. 代碼核心是數位DP+記憶化遞歸,專門解決超大范圍數字的數位統計問題;

  2. 2. 執行流程:邊界過濾→數字格式化→記憶化DFS逐位枚舉→統計合法平衡數;

  3. 3. 時間復雜度:O(1)(常數級)

  4. 4. 額外空間復雜度:O(1)(常數級)

Go完整代碼如下:

package main

import (
"fmt"
"strconv"
)

func countBalanced(low, high int64)int64 {
// 最小的滿足要求的數是 11
if high < 11 {
return0
}

low = max(low, 11)
lowS := strconv.FormatInt(low, 10)
highS := strconv.FormatInt(high, 10)
n := len(highS)
diffLH := n - len(lowS)
memo := make([][]int64, n)
for i := range memo {
// diff 至少 floor(n/2) * 9,至多 ceil(n/2) * 9,值域大小 n * 9
memo[i] = make([]int64, n*9+1)
}

var dfs func(int, int, bool, bool)int64
dfs = func(i, diff int, limitLow, limitHigh bool) (res int64) {
if i == n {
if diff != 0 { // 不合法
return0
}
return1
}
if !limitLow && !limitHigh {
p := &memo[i][diff+n/2*9] // 保證下標非負
if *p > 0 {
return *p - 1
}
deferfunc() { *p = res + 1 }() // 記憶化的時候加一,這樣 memo 可以初始化成 0
}

lo := 0
if limitLow && i >= diffLH {
lo = int(lowS[i-diffLH] - '0')
}
hi := 9
if limitHigh {
hi = int(highS[i] - '0')
}

for d := lo; d <= hi; d++ {
// 下一個位置奇偶性翻轉
res += dfs(i+1, diff+(1-i%2*2)*d,
limitLow && d == lo, limitHigh && d == hi)
}
return
}
return dfs(0, 0, true, true)
}

func main() {
low := int64(1)
high := int64(100)
result := countBalanced(low, high)
fmt.Println(result)
}

Python完整代碼如下:

# -*-coding:utf-8-*-

def count_balanced(low: int, high: int) -> int:
if high < 11:
return0

low = max(low, 11)
low_str = str(low)
high_str = str(high)
n = len(high_str)
diff_lh = n - len(low_str)

# 記憶化數組:memo[i][diff_offset]
# diff 的取值范圍:[-max_diff, max_diff],max_diff = (n // 2 + (n % 2)) * 9
max_possible_diff = ((n + 1) // 2) * 9
memo = [[-1] * (2 * max_possible_diff + 1) for _ in range(n)]

def dfs(i: int, diff: int, limit_low: bool, limit_high: bool) -> int:
if i == n:
return1if diff == 0else0

# 記憶化:只有當不受 low 和 high 限制時才能復用
if not limit_low and not limit_high:
idx = diff + max_possible_diff
if memo[i][idx] != -1:
return memo[i][idx]

lo = 0
if limit_low and i >= diff_lh:
lo = int(low_str[i - diff_lh])

hi = 9
if limit_high:
hi = int(high_str[i])

total = 0
for d in range(lo, hi + 1):
# 根據位置 i 的奇偶性決定 diff 的增減
# i=0 是最高位(視為偶數位,與 Go 版本一致)
sign = 1if i % 2 == 0else-1
total += dfs(i + 1, diff + sign * d,
limit_low and d == lo,
limit_high and d == hi)

if not limit_low and not limit_high:
memo[i][diff + max_possible_diff] = total
return total

return dfs(0, 0, True, True)

if __name__ == "__main__":
low_val = 1
high_val = 100
result = count_balanced(low_val, high_val)
print(result)

C++完整代碼如下:

  





using namespace std;

long long countBalanced(long long low, long long high) {
// 最小的滿足要求的數是 11
if (high < 11) {
return0;
}

low = max(low, 11LL);
string lowS = to_string(low);
string highS = to_string(high);
int n = highS.length();
int diffLH = n - lowS.length();

// 初始化記憶化數組,使用 -1 表示未計算
vector > memo(n, vector (n * 9 + 1, -1));

// 使用函數對象實現遞歸
function int , int , bool , bool )> dfs = [&]( int i, int diff, bool limitLow, bool limitHigh) -> long long {
if (i == n) {
return diff == 0 ? 1 : 0 ;
}

if (!limitLow && !limitHigh) {
int idx = diff + n / 2 * 9 ;
if (idx >= 0 && idx < n * 9 + 1 && memo[i][idx] != -1 ) {
return memo[i][idx];
}
}

int lo = 0 ;
if (limitLow && i >= diffLH) {
lo = lowS[i - diffLH] - '0' ;
}
int hi = 9 ;
if (limitHigh) {
hi = highS[i] - '0' ;
}

long long res = 0 ;
for ( int d = lo; d <= hi; d++) {
// 下一個位置奇偶性翻轉
res += dfs(i + 1 , diff + ( 1 - i % 2 * 2 ) * d,
limitLow && d == lo, limitHigh && d == hi);
}

if (!limitLow && !limitHigh) {
int idx = diff + n / 2 * 9 ;
if (idx >= 0 && idx < n * 9 + 1 ) {
memo[i][idx] = res;
}
}

return res;
};

return dfs( 0 , 0 , true , true );
}

int main() {
long long low = 1 ;
long long high = 100 ;
long long result = countBalanced(low, high);
cout << result << endl;
return 0 ;
}

我們相信人工智能為普通人提供了一種“增強工具”,并致力于分享全方位的AI知識。在這里,您可以找到最新的AI科普文章、工具評測、提升效率的秘籍以及行業洞察。 歡迎關注“福大大架構師每日一題”,發消息可獲得面試資料,讓AI助力您的未來發展。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

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.

相關推薦
熱點推薦
吃他汀一顆南瓜子不能碰?提醒:不止南瓜子,這4樣食物也要小心

吃他汀一顆南瓜子不能碰?提醒:不止南瓜子,這4樣食物也要小心

芹姐說生活
2026-05-12 16:25:54
女子結婚不到一周,卻因摩洛哥新娘視頻導致離婚

女子結婚不到一周,卻因摩洛哥新娘視頻導致離婚

映射生活的身影
2026-05-12 12:13:28
浙大鄭強教授:我不承認中國大學生就業難,是舒服的工作難找,建議少點抱怨少點索取

浙大鄭強教授:我不承認中國大學生就業難,是舒服的工作難找,建議少點抱怨少點索取

TOP大學來了
2026-05-11 16:39:00
內塔尼亞胡稱“不喜歡中國向伊朗導彈制造提供的支持” 中方回應

內塔尼亞胡稱“不喜歡中國向伊朗導彈制造提供的支持” 中方回應

財聯社
2026-05-12 15:27:18
公然拒掛國旗,訂單全給日韓,長榮如今的結局早已注定

公然拒掛國旗,訂單全給日韓,長榮如今的結局早已注定

瀲滟晴方DAY
2026-05-11 06:31:37
揚眉吐氣史無前例!第一次把在任美國國務卿永久攔在中國國門外

揚眉吐氣史無前例!第一次把在任美國國務卿永久攔在中國國門外

雪中風車
2026-05-12 13:10:31
忍無可忍,烏克蘭與川普徹底攤牌,20國爭相與烏展開合作

忍無可忍,烏克蘭與川普徹底攤牌,20國爭相與烏展開合作

史政先鋒
2026-05-12 14:44:10
上海大學通報“院長蘇某某論文被舉報數據造假”:已成立調查組,啟動調查程序 ,將根據調查情況嚴肅認真處理

上海大學通報“院長蘇某某論文被舉報數據造假”:已成立調查組,啟動調查程序 ,將根據調查情況嚴肅認真處理

魯中晨報
2026-05-12 16:54:06
普京已經開始絕望:戰爭發生轉折了

普京已經開始絕望:戰爭發生轉折了

黔有虎
2026-05-11 20:02:09
15萬  !比亞迪又一款新車正式上市!

15萬 !比亞迪又一款新車正式上市!

科技堡壘
2026-05-12 13:03:17
女子推搡哨兵后續:官媒發聲,知情人爆料,恐不止坐牢這么簡單

女子推搡哨兵后續:官媒發聲,知情人爆料,恐不止坐牢這么簡單

千言娛樂記
2026-05-12 15:10:56
特朗普即將訪華,英媒:美已意識到中國比美國想象中更強大

特朗普即將訪華,英媒:美已意識到中國比美國想象中更強大

混沌錄
2026-05-11 18:07:10
大霧黃色預警繼續:山東江蘇等地局地有濃霧或強濃霧

大霧黃色預警繼續:山東江蘇等地局地有濃霧或強濃霧

界面新聞
2026-05-12 18:11:19
穿禮服后退款后續:女子身份曝光社死,工作遭牽連,商家準備起訴

穿禮服后退款后續:女子身份曝光社死,工作遭牽連,商家準備起訴

八斗小先生
2026-05-12 17:23:09
林浩:汶川地震9歲小英雄,被姚明抱上奧運,發誓考清華,現狀如何

林浩:汶川地震9歲小英雄,被姚明抱上奧運,發誓考清華,現狀如何

阿傖說事
2026-05-12 12:24:10
北京G3半場逆轉廣東!聯防+雙小外立功,周琦統治籃下,廣東靠2將

北京G3半場逆轉廣東!聯防+雙小外立功,周琦統治籃下,廣東靠2將

籃球資訊達人
2026-05-12 20:33:39
京滬高鐵漲價,罵聲一片

京滬高鐵漲價,罵聲一片

鳳眼論
2026-05-12 16:53:49
今早高峰江場路近云秀路SUV側翻釀3車事故 駕駛員脫困幸無人員傷亡

今早高峰江場路近云秀路SUV側翻釀3車事故 駕駛員脫困幸無人員傷亡

上觀新聞
2026-05-12 17:38:06
彭加木被找到了!知情人:DNA專家說99%就是彭加木,但有個遺憾!

彭加木被找到了!知情人:DNA專家說99%就是彭加木,但有個遺憾!

拳擊時空
2026-05-12 05:55:35
美媒披露:阿聯酋秘密對伊朗發動軍事打擊

美媒披露:阿聯酋秘密對伊朗發動軍事打擊

參考消息
2026-05-12 20:36:12
2026-05-12 21:39:00
moonfdd incentive-icons
moonfdd
福大大架構師每日一題
1221文章數 67關注度
往期回顧 全部

科技要聞

宇樹發布載人變形機甲,定價390萬元起

頭條要聞

新電動車到手不足一月頻繁自動鎖死 老人被摔傷五六次

頭條要聞

新電動車到手不足一月頻繁自動鎖死 老人被摔傷五六次

體育要聞

總是掉鏈子的“倒霉蛋”,闖進了歐戰決賽

娛樂要聞

白鹿風波升級!掉粉20萬評論區淪陷

財經要聞

黃仁勛真是被白宮徹底封殺了

汽車要聞

吉利銀河“TT”申報圖曝光 電動尾翼+激光雷達

態度原創

家居
親子
旅游
健康
公開課

家居要聞

極簡主義下的居住場域與空間

親子要聞

amh值0.95怎么調理?吃什么可以讓卵泡長得好又大又圓?

旅游要聞

藏在南京新街口的老巷子,你知道哪幾條

干細胞能讓人“返老還童”嗎

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版