力扣初級演算法每日打卡---加1
阿新 • • 發佈:2021-02-02
加一
給定一個由 整數 組成的 非空 陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存單個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入:digits = [1,2,3]
輸出:[1,2,4]
解釋:輸入陣列表示數字 123。
作者:力扣 (LeetCode)
連結:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
思路:
Python
- 把數組合成字串,用int方法取得字串的值並加一,最後再拆開,用map把 字元列表 轉化為 整型列表 就行了。
- 一開始想這不一句話解決嗎?
- 但是遇到輸入[0, 0]的時候出錯了,所以說還是要判斷一下值是否為0的。
JAVA
- 加法是從後向前的,所以說遍歷digits也應該從後向前。
- 應該有一個引數記錄是否發生進位(carry)
- 初始化返回陣列(result)應該比digits陣列多1位, 所以digits中的第i位,放在result中的話,應該是i+1
- result的長度有兩種情況,要麼等於digits的長度,要麼是digits數陣列長度加1。
PS:第一次用時這麼短,留個紀念hhh
程式碼
Python
def plusOne(digits):
value = int("".join(map(str,digits)))
if value == 0:
return digits[:len(digits)-1:]+[1]
else:
return list(map(int, list(str(value+1))))
JAVA
public static int[] plusOne(int[] digits) {
int[] result = new int[digits.length+1] ;
int carry = 1, bit = 0; //carry記錄有沒有進位, bit 記錄當前位的值
for(int i = digits.length-1; i >= 0; i--){ // 倒序遍歷
result[i+1] = (digits[i]+carry)%10; // 從後往前排列,又因為result比digit多1位,使用是i+1
carry = (digits[i]+carry)>9?1:0;
}
// 迴圈結束後如果carrry為1,說明最高位進位了,還需要再加一位
if (1 == carry){
result[0] = carry;
return result;
}
else{
//因為沒有進位,所以結果的實際長度和digit的一樣,而且digit不會再用到了,且不是引用進來的,所以說不會改變原digit
System.arraycopy(result, 1, digits, 0, digits.length);
return digits;
}
}