示例 1:
示例 2:
void backTracking(参数)
{if(终止条件){保存结果;return;}for(遍历从当前位置出发的所有“路径”){if(大于开始位置 && 当前元素和前一个元素相同){continue;}保存“路径”节点;backTracking(所需参数);回溯处理,删除上一步保存的“路径”节点,准备进行新的递归}
}
package Array;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @Author: IronmanJay* @Description: 90.子集 II* @CreateTime: 2022-11-25 09:04*/
public class p90_SubsetsII {public static void main(String[] args) {int[] nums = {1, 2, 2};List> res = subsetsWithDup(nums);System.out.println("res = " + res);}public static List> subsetsWithDup(int[] nums) {Arrays.sort(nums);List> res = new ArrayList<>();List path = new ArrayList<>();dfs_back_p90_SubsetsII(nums, res, path, 0);return res;}public static void dfs_back_p90_SubsetsII(int[] nums, List> res, List path, int start) {res.add(new ArrayList<>(path));for (int i = start; i < nums.length; i++) {if (i > start && nums[i] == nums[i - 1]) {continue;}path.add(nums[i]);dfs_back_p90_SubsetsII(nums, res, path, i + 1);path.remove(path.size() - 1);}}}
#include
#includeint compare_p90_SubsetsII(const void *a, const void *b)
{return *(int *)a - *(int *)b;
}void dfs_back_p90_SubsetsII(int* nums, int numsSize, int** res, int* returnSize, int** returnColumnSizes, int* path, int pathSize, int start)
{res[*returnSize] = (int*)malloc(sizeof(int) * pathSize);memcpy(res[*returnSize], path, sizeof(int) * pathSize);(*returnColumnSizes)[*returnSize] = pathSize;(*returnSize)++;for (int i = start; i < numsSize; i++){if (i > start && nums[i] == nums[i - 1]){continue;}path[pathSize++] = nums[i];dfs_back_p90_SubsetsII(nums, numsSize, res, returnSize, returnColumnSizes, path, pathSize, i + 1);pathSize--;}
}int** subsetsWithDup(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
{qsort(nums, numsSize, sizeof(int), compare_p90_SubsetsII);*returnSize = 0;*returnColumnSizes = (int*)malloc(sizeof(int) * 10001);int** res = (int**)malloc(sizeof(int*) * 10001);int* path = (int*)malloc(sizeof(int) * numsSize);dfs_back_p90_SubsetsII(nums, numsSize, res, returnSize, returnColumnSizes, path, 0, 0);return res;
}/*主函数省略*/
Java语言版

C语言版
