Special Number คือจำนวนเต็มบวกที่มีเพียง 1 หลักในรูปแบบทศนิยม (1-9) หรือจำนวนที่มีหลักมากกว่า 1 แต่หารด้วยจำนวนหลักของมันลงตัว และผลหารก็เป็น Special Number ด้วย
ตัวอย่าง
อินพุต: left_limit = 5, right_limit = 30 → เอาต์พุต: 13
Special numbers ในช่วง: 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24, 28
วิธีแก้ปัญหา
- ถ้า
right_limit < 10คืนค่าright_limit - left_limit + 1 - สร้างลิสต์
number_listเริ่มต้นด้วยค่าพื้นฐาน - สร้าง Special Numbers เพิ่มเติมโดยคูณค่าที่มีอยู่กับจำนวนหลัก
- กรองค่าที่อยู่ในช่วงและนับจำนวน
ตัวอย่างโค้ด
def strange(left_limit, right_limit):
if right_limit < 10:
return right_limit - left_limit + 1
len_right = len(str(right_limit))
number_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18]
for j in range(2, len_right + 1):
for k in number_list:
temp1 = k * j
if len(str(temp1)) == j:
number_list.append(temp1)
elif len(str(temp1)) > j:
break
if number_list[-1] >= right_limit:
break
number_list = list(set(number_list))
count = 0
for temp2 in number_list:
if left_limit <= temp2 <= right_limit:
count += 1
return count
print(strange(5, 30))
อินพุต / เอาต์พุต
Input: 5, 30 Output: 13
หมายเหตุ: อัลกอริทึมสร้าง Special Numbers แบบ dynamic programming โดยใช้ค่าที่รู้จักแล้วคูณกับจำนวนหลัก