สมมติว่าเรามีตัวเลขสองตัว n และ k เราต้องหาสตริงตัวพิมพ์เล็กที่เล็กที่สุดในพจนานุกรมของขนาด k และระยะทาง n ระยะทางเป็นผลรวมของจำนวนตัวอักษรในตัวอักษร ตัวอย่างเช่น 'a' มีตัวอักษรหมายเลข 1 'b' มี 2 'y' มี 25 'z' มี 26 เป็นต้น
ดังนั้น หากอินพุตเป็น n =15 k =3 เอาต์พุตจะเป็น "aam" เนื่องจาก "aam" เป็นสตริงที่เล็กที่สุดในพจนานุกรมของความยาว 3 ซึ่งเป็นระยะทาง 1 + 1 + 13 =15
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- dist :=อาร์เรย์ขนาด k และเติม 1
- เครดิต :=n - k
- i :=k - 1
- ในขณะที่เครดิต> 0 ทำ
- val :=ขั้นต่ำของเครดิตและ 25
- dist[i] :=dist[i] + วาล
- เครดิต :=เครดิต - val
- i :=i - 1
- เข้าร่วม (อักขระของ (d - 1 + ASCII ของ "a")) สำหรับแต่ละ d ใน dist) และส่งคืน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(n, k): dist = [1] * k credit = n - k i = k - 1 while credit > 0: val = min(credit, 25) dist[i] += val credit -= val i -= 1 return "".join(chr(d - 1 + ord("a")) for d in dist) n = 15 k = 3 print(solve(n, k))
อินพุต
15, 3
ผลลัพธ์
aam