กลับไปยังโจทย์
ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

รวมตัวเลขในออบเจกต์ JSON แบบแบน

แปลง JSON แบบแบนที่มีค่าเป็นจำนวนเต็ม แล้วบวกค่าทั้งหมดเข้าด้วยกัน

สิ่งที่คุณจะได้เรียนรู้

  • อ่านคู่คีย์-ค่าจากข้อความ JSON
  • จัดการช่องว่างและจำนวนลบ
  • รวมค่าด้วยจำนวนเต็ม 64 บิต

โจทย์

โปรแกรมมักรับ JSON เช่น {"apples": 3, "pears": 5} ไลบรารีอย่าง System.Text.Json ช่วยแปลงให้ได้ แต่การลองเขียนกรณีง่าย ๆ เองจะช่วยให้เข้าใจรูปแบบของข้อมูลมากขึ้น

อินพุตเป็นอ็อบเจ็กต์ JSON แบบแบน: { จากนั้นเป็นคู่ "key": value ตั้งแต่ศูนย์คู่ขึ้นไป โดยคั่นกันด้วยเครื่องหมายจุลภาค แล้วปิดด้วย } คีย์อยู่ในเครื่องหมายอัญประกาศและไม่มีเครื่องหมายอัญประกาศ เครื่องหมายจุลภาค หรือโคลอน; ค่าเป็นจำนวนเต็มและอาจเป็นลบได้ อาจมีช่องว่างอยู่รอบ ๆ สัญลักษณ์ต่าง ๆ

Implement sum_json_numbers(text).

Input

text: อ็อบเจ็กต์ JSON

Output

Return the sum of all values (0 for an empty object).

เงื่อนไข

2 ≤ ความยาวข้อความ ≤ 100,000

ไม่เกิน 10,000 คู่ ทุกค่าและผลรวมอยู่ในช่วงจำนวนเต็ม 64 บิต

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
text = "{\"apples\": 3, \"pears\": 5}"

ผลลัพธ์ที่คาดหวัง:
expected = 8
อินพุต:
std::string text = "{\"apples\": 3, \"pears\": 5}";

ผลลัพธ์ที่คาดหวัง:
long long expected = 8;
อินพุต:
string text = "{\"apples\": 3, \"pears\": 5}";

ผลลัพธ์ที่คาดหวัง:
long expected = 8;

คำอธิบาย

3 + 5 = 8.

ตัวอย่างที่ 2
อินพุต:
text = "{ \"debt\" : -20 , \"cash\":15 }"

ผลลัพธ์ที่คาดหวัง:
expected = -5
อินพุต:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";

ผลลัพธ์ที่คาดหวัง:
long long expected = -5;
อินพุต:
string text = "{ \"debt\" : -20 , \"cash\":15 }";

ผลลัพธ์ที่คาดหวัง:
long expected = -5;

คำอธิบาย

ช่องว่างรอบสัญลักษณ์ไม่มีผล: −20 + 15 = −5

แนวทางการแก้

ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ

คำใบ้ 1

เอาวงเล็บปีกกาออก แล้วแยกคู่ที่จุลภาค

คำใบ้ 2

ค่าคือข้อความหลังโคลอน ตัดช่องว่างก่อนแปลง

คำใบ้ 3

ใช้จำนวนเต็ม 64 บิต และคืน 0 สำหรับออบเจกต์ว่าง

ความซับซ้อนที่คาดหวัง

เวลา O(ความยาวข้อความ), หน่วยความจำเพิ่ม O(1)

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก