สมมติว่าเรามีรายการตัวเลขชื่อ nums เราต้องหาผลรวมของการต่อตัวเลข (concatenation) ของทุกคู่ที่เป็นไปได้ใน nums โดยคู่ (i, j) และ (j, i) ถือเป็นคู่ที่ต่างกัน
ตัวอย่าง
อินพุต: nums = [5, 3]
การต่อคู่ที่เป็นไปได้:
5 concat 5 = 555 concat 3 = 533 concat 5 = 353 concat 3 = 33
ขั้นตอนการแก้ปัญหา
ใช้การจดจำ (memoization) เพื่อหลีกเลี่ยงการคำนวณซ้ำ:
- สร้าง dictionary
memoเพื่อเก็บผลรวมการต่อของแต่ละตัวเลขกับทุกตัวเลขในลิสต์ - คำนวณ
c= ผลรวมของทุกตัวเลขในลิสต์ (ใช้สำหรับกรณีตัวเลขเป็น 0) - วนลูปผ่านแต่ละตัวเลข
nums[i]:- ถ้า
nums[i] == 0ให้เพิ่มcเข้าtemp(เพราะ 0 ต่ออะไรก็ได้ 0) - ถ้า
nums[i]อยู่ในmemoแล้ว ให้ใช้ค่าที่เก็บไว้ - มิฉะนั้น คำนวณผลรวมการต่อของ
nums[i]กับทุกตัวเลขในลิสต์ เก็บในmemoและเพิ่มเข้าtemp
- ถ้า
- คืนค่า
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