算法-递归三(树形结构)
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; // 回溯啊 } } } }