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

โปรแกรมหาผลรวมของคู่ที่ต่อกันได้ของทุกสมาชิกในลิสต์ด้วย Python

สมมติว่าเรามีรายการตัวเลขชื่อ nums เราต้องหาผลรวมของการต่อตัวเลข (concatenation) ของทุกคู่ที่เป็นไปได้ใน nums โดยคู่ (i, j) และ (j, i) ถือเป็นคู่ที่ต่างกัน

ตัวอย่าง

อินพุต: nums = [5, 3]

การต่อคู่ที่เป็นไปได้:

  • 5 concat 5 = 55
  • 5 concat 3 = 53
  • 3 concat 5 = 35
  • 3 concat 3 = 33
ผลรวม = 55 + 53 + 35 + 33 = 176

ขั้นตอนการแก้ปัญหา

ใช้การจดจำ (memoization) เพื่อหลีกเลี่ยงการคำนวณซ้ำ:

  1. สร้าง dictionary memo เพื่อเก็บผลรวมการต่อของแต่ละตัวเลขกับทุกตัวเลขในลิสต์
  2. คำนวณ c = ผลรวมของทุกตัวเลขในลิสต์ (ใช้สำหรับกรณีตัวเลขเป็น 0)
  3. วนลูปผ่านแต่ละตัวเลข nums[i]:
    • ถ้า nums[i] == 0 ให้เพิ่ม c เข้า temp (เพราะ 0 ต่ออะไรก็ได้ 0)
    • ถ้า nums[i] อยู่ใน memo แล้ว ให้ใช้ค่าที่เก็บไว้
    • มิฉะนั้น คำนวณผลรวมการต่อของ nums[i] กับทุกตัวเลขในลิสต์ เก็บใน memo และเพิ่มเข้า temp
  4. คืนค่า temp

การนำไปใช้ใน Python

class Solution:
    def solve(self, nums):
        memo = {}
        nums1 = nums
        temp = 0
        c = sum(nums1)
        a = len(nums)
        for i in range(a):
            if nums[i] == 0:
                temp += c
            else:
                if nums[i] in memo:
                    temp += memo[nums[i]]
                else:
                    b = 0
                    for j in range(a):
                        b += int(str(nums[i]) + str(nums1[j]))
                    memo[nums[i]] = b
                    temp += memo[nums[i]]
        return temp

ob = Solution()
nums = [5, 3]
print(ob.solve(nums))

อินพุต

[5, 3]

เอาต์พุต

176