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


題目來源 力扣算法題目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刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM