1. 程式人生 > 其它 >力扣初級演算法每日打卡---加1

力扣初級演算法每日打卡---加1

技術標籤:刷題leetcodejavapython列表

加一

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

最高位數字存放在陣列的首位, 陣列中每個元素只儲存單個數字。

你可以假設除了整數 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; } }