122 / 205
LeetCode · MediumO'rta20 ball· ~25 daqiqa

Letter Combinations of a Phone Number

Sizga 2 dan 9 gacha bo'lgan raqamlardan iborat digits satri beriladi. Raqamlarga mos (eski telefonlardagi kabi) harflar orqali yasalishi mumkin bo'lgan barcha so'zlarni qaytaring.

Raqamlar-harflar mosligi: 2→abc, 3→def, 4→ghi, 5→jkl, 6→mno, 7→pqrs, 8→tuv, 9→wxyz. Kombinatsiyalar lug'at tartibida (birinchi raqamning harflari bo'yicha) qaytariladi. digits bo'sh bo'lsa, natija — bo'sh ro'yxat.

example.go
func solve(digits string) []string {
    // ...
}

Misollar

kod
Input: digits = "23"
Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"]
kod
Input: digits = ""
Output: []
kod
Input: digits = "2"
Output: ["a", "b", "c"]

Maslahatlar

  1. Har bir raqamga mos harflardan birini tanlab, keyingi raqamga o'tadigan rekursiv qidiruv (backtracking) haqida o'ylab ko'ring — bu xuddi daraxt shaklidagi barcha yo'llarni yig'ib chiqishga o'xshaydi.
  2. Raqam-harflar moslamasini (masalan '2' -> "abc") tayyorlab, joriy indeks va joriy yig'ilgan satrni oluvchi rekursiv funksiya yozing: indeks digits uzunligiga yetganda joriy satrni natijaga qo'shing, aks holda joriy raqamga mos har bir harf uchun uni satrga qo'shib keyingi indeksga rekursiya qiling.