如何從給定的數字中找到唯一的組合和(使用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

更新於:2021年8月27日

304 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.