Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

บวก 1 ให้ตัวเลขในรูปแบบลิสต์ digit ใน Python

ภาพรวม

โจทย์บวก 1 ให้ตัวเลขที่แทนด้วยลิสต์ของหลัก (digits) เช่น [2,4,9] = 249 → [2,5,0]

ตัวอย่าง

อินพุต: [9, 9] (แทน 99)

99 + 1 = 100 → [1, 0, 0]

อัลกอริทึม (Grade School Addition)

  1. เพิ่ม 0 นำหน้า (guard digit) → [0, 9, 9]
  2. บวก 1 ให้หลักสุดท้าย → [0, 9, 10]
  3. Propagate carry จากหลังมาหน้า:
    • i=2: 10 → carry=1, digit=0 → [0, 10, 0]
    • i=1: 10 → carry=1, digit=0 → [1, 0, 0]
  4. ถ้าหลักแรกเป็น 0 ตัดทิ้ง

โค้ด Python

class Solution:
    def solve(self, n):
        n = [0] + n
        n[-1] += 1
        for i in range(len(n) - 1, 0, -1):
            n[i-1] += n[i] // 10
            n[i] = n[i] % 10
        return n if n[0] > 0 else n[1:]

ob = Solution()
print(ob.solve([9, 9]))

วิธี Pythonic (แปลง int)

def plus_one(digits):
    num = int("".join(map(str, digits))) + 1
    return [int(d) for d in str(num)]

แต่ไม่เหมาะกับตัวเลขใหญ่มาก (เกิน precision)

ผลลัพธ์

[1, 0, 0]