這是我參與更文挑戰的第16天,活動詳情查看: 更文挑戰java
給定一個由 整數 組成的 非空 數組所表示的非負整數,在該數的基礎上加一。git
最高位數字存放在數組的首位, 數組中每一個元素只存儲單個數字。數組
你能夠假設除了整數 0 以外,這個整數不會以零開頭。markdown
java
中基礎類型中的int、long等類型的取值範圍public int[] plusOne(int[] digits) {
int total = 0;
for (int i = 0; i <digits.length ; i++) {
total = total * 10 + digits[i];
}
total += 1;
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]=total%10;
total = total / 10;
}
if (total != 0) {
digits = new int[digits.length + 1];
digits[0] = 1;
}
return digits;
}
複製代碼
2147483647
即2^31。那麼就會出現數組轉成數組超出範圍的狀況。那麼換成long能夠嗎?一樣的分析long類型64位也沒法知足100的長度。因此咱們這裏的思路在本題中是沒法經過檢驗的。c=a+b
。第一步咱們開始從末尾也就是4開始進行加1操做!獲得的結果是5.由於5!=10。因此沒有產生進位,因此在4以前的數據都不會發生變化。因此咱們直接將5賦予數組末尾而後直接返回數組oop
若是是9999,咱們在最後一位進行加1,結果是10這個時候產生進位咱們就須要到第三位進行加1,一樣會產生進位那麼咱們就須要一直重複下去。最終數組會被更新爲0000.post
上面咱們分析了進位只多是1 , 因此在全部位都發生了進位後原數組就會變成0 , 咱們只須要在數組頭部添加一個1元素便可測試
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]++;
digits[i] = digits[i] % 10;
//對10取餘以後若是是0說明發生進位,不然沒有進位直接結束
if (digits[i] != 0) return digits;
}
//說明當前數組所有發生進位相似999數字!此時須要擴展數組而且第一位爲進位1
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
複製代碼
點讚唄!spa