समस्या को छोटे और सरल "सबप्रॉब्लम" में विभाजित किया जा सकता है, जिन्हें आगे और सरल और छोटे सबप्रॉब्लम में विभाजित किया जा सकता है। हम प्रत्येक अंक को एक-एक करके लेते हैं और किसी भी अंक से पहुंच योग्य सभी n-अंकों की गणना करते हैं, हर अंक से पहुंच योग्य अंकों के मैपिंग को संग्रहीत करने के लिए एक मैप का उपयोग करते हैं। जब अंक n-अंक बन जाता है, तो काउंट अपडेट करें।
उदाहरण
using System; using System.Collections.Generic; namespace ConsoleApplication{ public class BackTracking{ private string GetKeyPadValueBasedOnInput(string digit){ Dictionary keypad = new Dictionary(); keypad.Add("2", "abc"); keypad.Add("3", "def"); keypad.Add("4", "ghi"); keypad.Add("5", "jkl"); keypad.Add("6", "mno"); keypad.Add("7", "pqrs"); keypad.Add("8", "tuv"); keypad.Add("9", "wxyz"); return keypad.GetValueOrDefault(digit); } public void FindSequence(string currentList, string digits, List output){ if (digits.Length == 0){ output.Add(currentList); return; } else{ string digit = digits.Substring(0, 1); string letters = GetKeyPadValueBasedOnInput(digit); for (int i = 0; i < letters.Length; i++){ char letter = GetCHarFromString(letters, i); FindSequence(currentList + letter, digits.Substring(1), output); } } } private char GetCHarFromString(string letters, int value){ char[] charArr = letters.ToCharArray(); return charArr[value]; } } class Program{ static void Main(string[] args){ BackTracking b = new BackTracking(); List<string> output = new List<string>(); b.FindSequence("", "34", output); foreach (var item in output){ Console.WriteLine(item); } } } }
आउटपुट
dg dh di eg eh ei fg fh fi