算法-递归三(树形结构)

public class Solution {
    public IList<IList<int>> Permute(int[] nums) {
        var rtItem = new List<int>();
        var visited= new Dictionary<int, bool>();
        IList<IList<int>> rt = new List<IList<int>>();
        BackTracking(nums, rtItem, rt, visited);
        return rt;
    }
    /*递归下面这种类型的
        1      |     2
      1    2   |  1     2
     1  2 1  2 | 1  2  1  2
    */
    public void BackTracking(int[] nums, List<int> rtItem, IList<IList<int>> rt, Dictionary<int, bool> visited)
{
    if (rtItem.Count == nums.Length)
    {
        rt.Add(new List<int>(rtItem.ToArray()));
        //return;
    }
    for (int i = 0; i < nums.Length; i++)
    {
        var num = nums[i];
        if (!visited.ContainsKey(num) || !visited[num])
        {
            rtItem.Add(num);
            visited[num]=true;
            BackTracking(nums, rtItem, rt, visited);
            rtItem.RemoveAt(rtItem.Count - 1); // 回溯啊
            visited[num] = false; // 回溯啊
        }
    }
}

}

 

posted @ 2023-04-09 10:54  vba是最好的语言  阅读(33)  评论(0编辑  收藏  举报