給定一個(gè)由整數(shù)組成的非空數(shù)組所表示的非負(fù)整數(shù),在該數(shù)的基礎(chǔ)上加一渣触。
最高位數(shù)字存放在數(shù)組的首位羡棵, 數(shù)組中每個(gè)元素只存儲(chǔ)一個(gè)數(shù)字。
你可以假設(shè)除了整數(shù) 0 之外嗅钻,這個(gè)整數(shù)不會(huì)以零開(kāi)頭皂冰。
示例 1:
輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數(shù)組表示數(shù)字 123。
示例 2:
輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數(shù)組表示數(shù)字 4321养篓。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/plus-one
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有秃流。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處觉至。
- 思路:
標(biāo)簽:數(shù)組遍歷
這道題需要整理出來(lái)有哪幾種情況剔应,在進(jìn)行處理會(huì)更舒服
末位無(wú)進(jìn)位睡腿,則末位加一即可语御,因?yàn)槟┪粺o(wú)進(jìn)位,前面也不可能產(chǎn)生進(jìn)位席怪,比如 45 => 46
末位有進(jìn)位应闯,在中間位置進(jìn)位停止,則需要找到進(jìn)位的典型標(biāo)志挂捻,即為當(dāng)前位 %10 后為 0碉纺,則前一位加 1,直到不為 0 為止刻撒,比如 499 => 500
末位有進(jìn)位骨田,并且一直進(jìn)位到最前方導(dǎo)致結(jié)果多出一位,對(duì)于這種情況声怔,需要在第 2 種情況遍歷結(jié)束的基礎(chǔ)上态贤,進(jìn)行單獨(dú)處理,比如 999 => 1000
解題思路參考以下作者 , 真的太強(qiáng)了~
作者:guanpengchn
鏈接:https://leetcode-cn.com/problems/two-sum/solution/hua-jie-suan-fa-66-jia-yi-by-guanpengchn/
來(lái)源:力扣(LeetCode)
著作權(quán)歸作者所有醋火。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)悠汽,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處箱吕。
// created by fivezm on 21,7 2019
public static int[] plusOne(int[] digits) {
int len = digits.length;
for (int i = len - 1; i >= 0; i--) {
digits[i]++; // i 位 加 1 ,
digits[i] = digits[i] % 10; // 求余再賦值給自己,如果求余得到的是0,則證明要進(jìn)位,所以要開(kāi)始下一個(gè)循環(huán),判斷前一位是否又為9,是否需要進(jìn)位
if (digits[i] != 0) //如果不是0,則證明不需要進(jìn)位,直接就可以返回?cái)?shù)組
return digits;
}
digits = new int[len + 1]; // 如果能走到這一行代碼,則經(jīng)過(guò)上面的循環(huán)后還沒(méi)return,就證明數(shù)組元素中所有元素值都是9,例如[9,9,9] ,
digits[0] = 1; // 那么加1后則需要將數(shù)組長(zhǎng)度加1,因?yàn)樵囟际?,加1后變?yōu)?0,所以可以直接new一個(gè)新的數(shù)組,新數(shù)組默認(rèn)初始化為{ 0 };
return digits; // 只需要改變數(shù)組[0] 元素為1 就可以了
}
public static void main(String[] args) {
int[] digits = {9, 9, 9};
System.out.println(Arrays.toString(plusOne(digits)));
}