โจทย์
แยกระยะเวลาออกเป็นชั่วโมง นาที และวินาที ให้เขียนหน่วยเป็น h, m และ s ตามลำดับ โดยแต่ละหน่วยคั่นด้วยช่องว่างหนึ่งช่อง ข้ามหน่วยที่มีค่าเป็นศูนย์ ยกเว้นกรณีที่วินาทีเป็นศูนย์ ให้เขียนเป็น 0s
ให้เขียนฟังก์ชัน format_duration(seconds)
อินพุต
seconds: ระยะเวลาทั้งหมดในหน่วยวินาที
เอาต์พุต
คืนค่าระยะเวลาที่จัดรูปแบบแล้ว เช่น 2h 2m 5s
เงื่อนไข
0 ≤ seconds ≤ 1,000,000,000. จำนวนชั่วโมงอาจมากกว่า 23 ได้ เนื่องจากเป็นระยะเวลา ไม่ใช่เวลาของวัน
ตัวอย่าง
อินพุต:
seconds = 7325
ผลลัพธ์ที่คาดหวัง:
expected = "2h 2m 5s"
อินพุต:
long long seconds = 7325;
ผลลัพธ์ที่คาดหวัง:
std::string expected = "2h 2m 5s";
อินพุต:
long seconds = 7325;
ผลลัพธ์ที่คาดหวัง:
string expected = "2h 2m 5s";
คำอธิบาย
7325 = 2 × 3600 + 2 × 60 + 5
อินพุต:
seconds = 120
ผลลัพธ์ที่คาดหวัง:
expected = "2m"
อินพุต:
long long seconds = 120;
ผลลัพธ์ที่คาดหวัง:
std::string expected = "2m";
อินพุต:
long seconds = 120;
ผลลัพธ์ที่คาดหวัง:
string expected = "2m";
คำอธิบาย
120 วินาที เท่ากับ 2 นาทีพอดี ให้ละเว้นชั่วโมงและวินาทีที่เป็นศูนย์
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
แยกจำนวนวินาทีทั้งหมดเป็นหน่วยใหญ่ก่อน แล้วค่อยจัดรูปแบบเฉพาะส่วนที่ไม่เป็นศูนย์
คำใบ้ 2
เรียงชั่วโมง นาที และวินาทีตามลำดับ พร้อมเว้นวรรคระหว่างหน่วยที่ใช้
คำใบ้ 3
ถ้าหน่วยใหญ่ทั้งหมดเป็นศูนย์ ก็ต้องให้ผลลัพธ์เป็น 0s เมื่อ duration เป็นศูนย์
ความซับซ้อนที่คาดหวัง
เวลา O(1), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน