WALKER

Dasturchi, frilanser, gik va introvert

by Sherzod Shermukhamedov

Leetcode 17. Letter Combinations of a Phone Number

2-9 sonlaridan taşkil topgan string berilgan. Raqamlar ketma-ketligi böyiça barça harf-kombinatsiyalarni array körinişida qaytaring. Sonlarning harflar böyiça mappingi quyidagi rasmda keltirilgan. 1 soni heç qanday harfga boğlanmagan.

Misol:

Input: digits = "23" Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"]

Işlaş tartibi

Yuqorida keltirilgan misolga e'tibor bersangiz, u odatiy tree ma'lumotlar tuzilmasiga öxşaydi:

Demak bir yeçim - berilgan matn raqamlaridan mapping asosida tree yasab olişimiz va tree'ning barglaridagi qiymatlarni array'ga terib çiqişimiz mumkin.

Lekin map asosida işlaydigan backtracking algoritmli yeçim ham bor. Biz quyida uni körib ötamiz.

  1. Telefon harflarini map arrayga yiğib olamiz:
const map = {
    2: "abc",
    3: "def",
    4: "ghi",
    5: "jkl",
    6: "mno",
    7: "pqrs",
    8: "tuv",
    9: "wxyz",
  };
  1. digits matnining har bir harfini (raqamini) rekursiv funksiya içida map içidan topamiz. Masalan, digits = 56 bölsa, const str = map[digits[0]] dan keyin str konstanta 'jkl' qiymatga ega böladi.

  2. str matnning har bir harfini alohida prefix array'ga yiğamiz.

  3. rekursiv funksiyaga index + 1 argument berib, uni işga tuşiramiz.

  4. rekursiv funksiya içida agar index === digits.length bölsa, prefix array'ni stringga ögirib, results arrayga qöşamiz va funksiyani töxtatamiz.

  5. results arrayni asosiy funksiyaning natijasi sifatida qaytaramiz.

Tuşunarli bölişi uçun kodni örganib çiqqaningiz ma'qul.

Kod