给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。
数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。
示例 1:
输入:nums = [4,6,7,7] 输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]
#include <stdio.h>
#include <stdlib.h>
int sum=0;
int path[100];
int visited[100];
int top=0;
int nums[]={4,6,7,7};
int find(int *uset,int usetSize,int key){
for (int i = 0; i < usetSize; ++i) {
if (uset[i] == key)
return 1;
}
return 0;
}
void dfs(int nums[],int startIndex,int numSize)
{
if (top>1){
for (int i = 0; i < top; ++i) {
printf("%d ", path[i]);
}
printf("\n");
// return;
}
int *uset = (int *)malloc(sizeof(int) * numSize);
int useTop=0;
for (int i = startIndex; i < numSize; ++i) {
if ((top>0 && nums[i] < path[top-1]) || find(uset,useTop,nums[i]))
continue;
uset[useTop++] = nums[i];
path[top++] = nums[i];
dfs(nums,i+1,numSize);
top--;
}
}
int main()
{
// qsort(nums,3,sizeof(int),cmp);
dfs(nums,0,4);
return 0;
}
本文描述了一个编程问题,要求在给定整数数组中找到所有不同的递增子序列,即使包含重复元素。作者使用深度优先搜索(DFS)算法实现了解决方案。
969

被折叠的 条评论
为什么被折叠?



