給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一


題目來源 力扣算法題目66 加一計算

題目詳細描述:

給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。

最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。

示例 2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。

在解題的過程中注意出現的999 或者是89 涉及9的操作

本次解題采用的是正向思維的方式,

思路如下:

case1:如果是普通的情況 只用給最后一位加一即可(最后一位不是9的情況)

case2:如果是9,99,999,全9的情況,只需要數組擴展一位 首位填1

case3:如果是普通的情況 用while循環進行處理 

代碼如下:

class Solution {
    public int[] plusOne(int[] digits) {
        int length = digits.length;
        // 如果最后一位不是9的情況的處理方式
        if(digits[length - 1] != 9){
            digits[length - 1] = digits[length - 1] + 1;
            return digits;
        }
        boolean addFlag = true;
        // 如果數組的所有位都是9的情況 進行處理
        for(int j = 0; j<length;j++){
            if(digits[j] != 9){
                addFlag = false;
            }
        }
        if(addFlag){
            int[] result = new int[length+1];
            for(int k=0;k<length+1;k++){
                if(k==0){
                    result[k] = 1;
                }else{
                    result[k] = 0;
                }
            }
            return result;
        }
        
        // 如果最后一位是9的情況
        int i = length-1;
        // 聲明一個新的數組 
        int[] array = new int[length];
        while(digits[i] == 9){
            // 如果是最后一位 只是進位
            array[i] = 0;
            array[i-1] = digits[i-1]+1;
            i--;
        }
        // 判斷如果補位沒補完,把剩下的位數補充完整
        if(i == 0 && length>1 && digits[1] != 9){
            array[i] = digits[i];
        }
        if(i>0){
            for(int m = 0;m<i; m++){
                array[m] = digits[m];
            }
        }
        return array;
    }
}

  


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 Leetcode練習(Python):第66題:給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。 最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 給定兩個非空鏈表來表示兩個非負整數。位數按照逆序方式存儲,它們的每個節點只存儲單個數字。將兩數相加返回一個新的鏈表。 給定一個非負整數 num,反復將各個位上的數字相加,直到結果為一位數。 給定一個非負整數 num,反復將各個位上的數字相加,直到結果為一位數 給定一個非空的整數數組,返回其中出現頻率前 k 高的元素。 Leetcode練習(Python):數組類:第42題:給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之后能接多少雨水。 寫一個遞歸函數DigitSum(n),輸入一個非負整數,返回組成它的數字之和 給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM