天天看點

LeetCode_數組_簡單_66.加一1.題目2.思路3.代碼實作(Java)

目錄

  • 1.題目
  • 2.思路
  • 3.代碼實作(Java)

1.題目

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

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

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

示例 1:

輸入:digits = [1,2,3]

輸出:[1,2,4]

解釋:輸入數組表示數字 123。

示例 2:

輸入:digits = [4,3,2,1]

輸出:[4,3,2,2]

解釋:輸入數組表示數字 4321。

示例 3:

輸入:digits = [0]

輸出:[1]

提示:

1 <= digits.length <= 100

0 <= digits[i] <= 9

來源:力扣(LeetCode)

連結:https://leetcode-cn.com/problems/plus-one

2.思路

(1)分析題目可知,該整數在加一時,主要有以下兩種情況:

(1.1)個位上的數字不為9,那麼直接将個位上的數字 digits[digits.length-1] 加一,并且傳回 digits 數組即可;

(1.2)個位上的數字為9,那麼此時則需要考慮進位的問題:

先将個位上的數字 digits[digits.length-1] 指派為 0 ,然後再依次判斷高一位的數字是否也為9:

如果為9,則将其設定為0,繼續判斷更高位,直到将數組 digits 從後往前周遊結束或者高位數字不為 9 為止;

如果不為9,則将其加一然後直接退出循環;

退出循環後,若周遊數組 digits 的下标 length < 0,則說明數組中每個元素值都為9,即[9,…,9],該整數加一之後等于10…0,存儲該整數的數組長度應等于在原來的數組digits的長度基礎上再加一,是以此時建立長度為 digits.length+1 的數組res,并且設定res[0]=1,然後傳回res;若length ≥ 0,直接傳回數組 digits 即可。

3.代碼實作(Java)

//(1)思路1
public int[] plusOne(int[] digits) {
    int length = digits.length;
    if(digits[length-1]!=9){
        //個位上的數字不為9
        digits[length-1]++;
        return digits;
    }else{
        //個位上的數字為9
        digits[length-1]=0;
        length-=2;
        while(length>=0){
            if(digits[length]==9){
            	//高一位也為9,将其設定為0
                digits[length]=0;
                //繼續判斷更高位
                length--;
            }else{
            	//高一位不為9,将其加一然後直接退出循環
                digits[length]++;
                break;
            }
        }
        if(length<0){
        	//length<0說明數組中每個元素值都為9,即[9,...,9]
        	//該整數加一之後等于10...0,存儲該整數的數組長度應等于在原來的數組digits的長度基礎上再加一
            int[] res = new int[digits.length+1];
            //設定最高位為1即可,其餘位的值均為0
            res[0]=1;
            return res;
        }else{
            return digits;
        }
    }
}