ลำดับ Look and Say เริ่มจาก "1" แต่ละพจน์อธิบายพจน์ก่อนหน้า: 1, 11 (หนึ่ง 1), 21 (สอง 1), 1211 (หนึ่ง 2 หนึ่ง 1), 111221 (หนึ่ง 1 หนึ่ง 2 สอง 1)... ต้องการพจน์ที่ n (1 ≤ n ≤ 30)
ขั้นตอนการแก้ปัญหา
s = "1"- ถ้า
n == 1คืนs - วน
iจาก 2 ถึงn:j = 0, temp = "", curr = "", count = 0- วนลูปอ่าน
s:- ถ้า
curr == "":curr = s[j], count = 1, j += 1 - ถ้า
curr == s[j]:count += 1, j += 1 - มิฉะนั้น:
temp += str(count) + curr, curr = "", count = 0
- ถ้า
temp += str(count) + currs = temp
- คืน
s
ตัวอย่างโค้ด
class Solution(object):
def solve(self, n):
s = "1"
if n == 1:
return s
for i in range(2, n + 1):
j = 0
temp = ""
curr = ""
count = 0
while j < len(s):
if curr == "":
curr = s[j]
count = 1
j += 1
elif curr == s[j]:
count += 1
j += 1
else:
temp += str(count) + curr
curr = ""
count = 0
temp += str(count) + curr
s = temp
return s
ob = Solution()
n = 5
print(ob.solve(n))
อินพุต
5
เอาต์พุต
"111221"