首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 66 加一:數組表示非負整數的模擬加法

     編輯:關於C++

問題描述

給定一個非負整數,以數組形式存儲(最高位在頭),對其加 1,返回結果數組。例如 [1,2,3] → [1,2,4];[9,9] → [1,0,0]。

模擬加法邏輯

從最低位(數組末尾)向最高位遍歷,處理進位:

  1. 初始進位 carries = 1(即加 1)。
  2. 對每位:sum = digits[i] + carries;digits[i] = sum % 10;carries = sum / 10。
  3. 若 carries 變 0 可提前結束。
  4. 遍歷結束後若 carries = 1,說明最高位產生進位(如 999→1000),需創建新數組,長度 +1,首位置 1,其餘 0。

代碼實現要點

提供的 Java 代碼邏輯清晰:

  • for 循環條件 `i >= 0 && carries > 0` 實現提前終止優化。
  • 原地修改 digits 數組,空間 O(1)(不計輸出)。
  • 進位處理統一用 sum % 10 和 sum / 10,避免分支判斷。
  • 擴容時新建數組 `rst`,首位賦 1,其餘默認 0(Java 新數組自動初始化為 0)。

複雜度分析

  • 時間:O(n),n 為數組長度,單次遍歷。
  • 空間:O(1) 額外空間(最壞情況擴容 O(n) 但屬於輸出必要空間)。

邊界情況

  • 輸入 [0] → [1]
  • 輸入 [9,9,9] → [1,0,0,0]
  • 輸入 [] 不合法(題目保證非負整數,至少一位)。

總結

本題是基礎模擬題,考察進位處理、邊界條件及數組操作。關鍵在於從低位向高位處理、統一進位邏輯、提前終止優化。代碼簡潔健壯,屬於標準解法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved