如何從給定的數字中找到唯一的組合和(使用C#)?
建立一個輸出列表來儲存有效的序列,建立一個當前列表來儲存在遞迴樹路徑中找到的當前序列。一個回溯函式,它將進入遞迴直到達到目標,否則,它應該回溯到之前的階段,因為目標小於0。在任何時候,如果目標變為0,則將候選陣列新增到結果中,因為候選陣列中的值必須加起來等於給定的目標。
如果不是這種情況,則逐個新增候選陣列中的元素,並遞迴地向前移動。
例如,數字是5,我們需要找到構成5的數字。輸出將是“1,4”、“2,3”、5。從輸出014、023和05可以丟棄。
示例
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication{
public class BackTracking{
public void UniqueCombinationOfNumbersCorrespondsToSum(int n){
int[] array = new int[n + 1];
for (int i = 1; i <= n; i++){
array[i] = i;}
List<int> currentList = new List<int>();
List<List<int>> output = new List<List<int>>();
UniqueCombinationSum(array, n, 0, 0, currentList, output);
foreach (var item in output){
StringBuilder s = new StringBuilder();
foreach (var item1 in item){
s.Append(item1.ToString());
}
Console.WriteLine(s);
s = null;
}
}
private void UniqueCombinationSum(int[] array, int target, int sum, int index, List<int> currentList, List<List<int>> output){
if (sum == target){
List<int> newList = new List<int>();
newList.AddRange(currentList);
output.Add(newList);
return;
}
else if (sum > target){
return;
}
else{
for (int i = index; i < array.Length; i++){
currentList.Add(array[i]);
UniqueCombinationSum(array, target, sum + array[i], i + 1, currentList, output);
currentList.Remove(array[i]);
}
}
}
}
class Program{
static void Main(string[] args){
BackTracking b = new BackTracking();
b.UniqueCombinationOfNumbersCorrespondsToSum(5);
}
}
}
}輸出
14 23 05
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP