สมมติว่าเรามีค่าเริ่มต้นและสิ้นสุดสองค่า เราต้องหาจำนวนขั้นต่ำของการดำเนินการที่จำเป็นในการแปลงจุดเริ่มต้นไปยังจุดสิ้นสุดโดยใช้การดำเนินการเหล่านี้ -
-
ลดลง 1
-
คูณด้วย 2
ดังนั้น หากอินพุตเป็นเหมือน start =2 สิ้นสุด =7 ผลลัพธ์จะเป็น 3 เนื่องจากเราสามารถคูณ 2 ได้ 4 จากนั้นคูณ 2 ได้ 8 แล้วลบ 1 เพื่อให้ได้ 7
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ตอบ :=0
-
ทำสิ่งต่อไปนี้อย่างไม่สิ้นสุด ทำ
-
ถ้าสิ้นสุด <=เริ่มแล้ว
-
return ans + start - end
-
-
มิฉะนั้นเมื่อสิ้นสุดเป็นเลขคี่แล้ว
-
end :=end + 1, ans :=ans + 1
-
-
มิฉะนั้น
-
end :=ผลหารสิ้นสุด / 2
-
ans :=ans + 1
-
-
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, start, end): ans = 0 while True: if end <= start: return ans + start - end elif end % 2: end += 1 ans += 1 else: end //= 2 ans += 1 ob1 = Solution() start = 2 end = 7 print(ob1.solve(start, end))
อินพุต
2, 7
ผลลัพธ์
3