C# Code Caprice Algorithm Training Camp Tag 25 | Backtracking-Algorithmus, kombiniertes Summenproblem, Telefonnummernkombination

LeetCode216 Kombinationssumme III

Thema:

Finden Sie alle k Zahlenkombinationen, die n ergeben und die folgenden Bedingungen erfüllen:
Verwenden Sie nur die Zahlen 1 bis 9 und verwenden Sie
jede Zahl höchstens einmal.
Geben Sie eine Liste aller möglichen gültigen Kombinationen zurück. Die Liste darf dieselbe Kombination nicht zweimal enthalten und die Kombinationen können in beliebiger Reihenfolge zurückgegeben werden.

Beispiel 1:
Eingabe: k = 3, n = 7
Ausgabe: [[1,2,4]]
Erläuterung:
1 + 2 + 4 = 7
Es gibt keine anderen passenden Kombinationen.

Beispiel 2:
Eingabe: k = 3, n = 9
Ausgabe: [[1,2,6], [1,3,5], [2,3,4]]
Erklärung:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
Es gibt keine andere passende Kombination.

Beispiel 3:
Eingabe: k = 4, n = 1
Ausgabe: []
Erläuterung: Es gibt keine gültige Kombination.
Wenn wir 4 verschiedene Zahlen im Bereich [1,9] verwenden, ist die kleinste Summe, die wir erhalten können, 1+2+3+4 = 10, und da 10 > 1, gibt es keine gültige Kombination.

Idee:

Fügen Sie hier eine Bildbeschreibung ein

Code:
public class Solution {
    
    
    IList<IList<int>> res = new List<IList<int>>();
    IList<int> list = new List<int>();
    public IList<IList<int>> CombinationSum3(int k, int n)
    {
    
    
        BackTracking(k, n, 1, 0);
        return res;
    }

    public void BackTracking(int k, int targetSum, int startIndex, int sum)
    {
    
    
        //剪枝
        if (sum > targetSum) return;
        if (list.Count == k)
        {
    
    
            if (sum == targetSum)
            {
    
    
                res.Add(new List<int>(list));
            }
            return;
        }
        for (int i = startIndex; i <= 9; i++)
        {
    
    
            sum += i;
            list.Add(i);
            BackTracking(k, targetSum, i + 1, sum);
            //回溯(最关键的一步)
            sum -= i;
            list.RemoveAt(list.Count - 1);
        }
    }
}

LeetCode17-Telefonnummernalphabet

Thema:

Geben Sie bei einer Zeichenfolge, die nur die Zahlen 2–9 enthält, alle Buchstabenkombinationen zurück, die sie darstellen kann. Die Antworten können in beliebiger Reihenfolge zurückgegeben werden.
Die Zuordnung von Zahlen zu Buchstaben ist unten angegeben (wie bei Telefontasten). Beachten Sie, dass 1 keinem Buchstaben entspricht.

Beispiel 1:
Fügen Sie hier eine Bildbeschreibung ein

Eingabe: Ziffern = „23“
Ausgabe: [„ad“, „ae“, „af“, „bd“, „be“, „bf“, „cd“, „ce“, „cf“]

Beispiel 2:
Eingabe: Ziffern = „“
Ausgabe: []

Beispiel 3:
Eingabe: Ziffern = „2“
Ausgabe: [„a“, „b“, „c“]

Code:
public class Solution {
    
    
    IList<string> res1 = new List<string>();
    public IList<string> LetterCombinations(string digits)
    {
    
    
        Dictionary<char, string> dic = new Dictionary<char, string>();
        if (digits.Length == 0) return res1;
        dic.Add('2', "abc");
        dic.Add('3', "def");
        dic.Add('4', "ghi");
        dic.Add('5', "jkl");
        dic.Add('6', "mno");
        dic.Add('7', "pqrs");
        dic.Add('8', "tuv");
        dic.Add('9', "wxyz");
        BackTracking1(0, "", digits, dic);
        return res1;
    }

    public void BackTracking1(int startIndex, string str, string digits, Dictionary<char,string> dic)
    {
    
    
        if (str.Length == digits.Length)
        {
    
    
            res1.Add(str);
            return;
        }
        string temp = dic[digits[startIndex]];
        for (int i = 0; i < temp.Length; i++)
        {
    
    
            str += temp[i];
            BackTracking1(startIndex + 1, str, digits, dic);
            str = str.Remove(str.Length - 1);
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44740741/article/details/130020331
Recomendado
Clasificación