Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ความเป็นไปได้ของกระเบื้องตัวอักษรใน Python


สมมติว่าเรามีชุดกระเบื้อง โดยแต่ละแผ่นมีแผ่นตัวอักษรหนึ่งตัว[i]พิมพ์อยู่ ค้นหาจำนวนลำดับตัวอักษรที่ไม่ว่างเปล่าที่เป็นไปได้ที่เราสามารถสร้างได้ ดังนั้นหากอินพุตคือ "AAB" เอาต์พุตจะเป็น 8 เนื่องจากลำดับคือ "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่ง dfs() ที่จะนับ
  • ผลรวม :=0
  • สำหรับฉันอยู่ในช่วง 1 ถึง 26
    • ถ้า count[i] =0 ให้ทำซ้ำต่อไปโดยไม่ต้องตรวจสอบส่วนที่เหลือ
    • ลดจำนวน[i] 1 และเพิ่มผลรวม 1
    • sum :=sum + dfs(นับ)
    • เพิ่มจำนวน[i] ขึ้น 1
  • ผลตอบแทน
  • วิธีการจริงจะเป็นเช่น −
  • สร้างอาร์เรย์การนับหนึ่งขนาด 26 และเติมด้วย 0
  • สำหรับแต่ละองค์ประกอบ i ในไทล์
    • เพิ่มจำนวน[i – ‘A’ + 1] ขึ้น 1
  • ส่งคืน dfs(นับ)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution(object):
   def numTilePossibilities(self, tiles):
      count = [0 for i in range(27)]
      for i in tiles:
         count[ord(i)-ord('A')+1]+=1
      return self.dfs(count)
   def dfs(self,count):
      summ = 0
      for i in range(1,27):
         if count[i]==0:
            continue
         count[i]-=1
         summ+=1
         summ+=self.dfs(count)
         count[i]+=1
      return summ
ob = Solution()
print(ob.numTilePossibilities("AAB"))

อินพุต

"AAB"

ผลลัพธ์

8