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:
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:
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);
}
}
}