/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int temp[30];

void dfs(int** array,int* nums,int numsSize,int* returnSize,int* column,int index,int count){
    if(index>numsSize) return;
    if(count>=2){
        column[*returnSize]=count;
        array[*returnSize]=(int*)malloc(sizeof(int)*count);
        for(int i=0;i<count;i++) array[*returnSize][i]=temp[i];
        (*returnSize)++;
    }
    int use[300]={0};
    for(int i=index;i<numsSize;i++){
        if(use[nums[i]+100]==0){
            if(count==0){
                use[nums[i]+100]=1;
                temp[0]=nums[i];
                dfs(array,nums,numsSize,returnSize,column,i+1,count+1);
            }else{
                if(temp[count-1]<=nums[i]){
                    use[nums[i]+100]=1;
                    temp[count]=nums[i];
                    dfs(array,nums,numsSize,returnSize,column,i+1,count+1);
                }
            }
        }
    }
}

int** findSubsequences(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
    *returnSize=0;
    int** array=(int**)malloc(sizeof(int*)*100000);
    int* column=(int*)malloc(sizeof(int)*100000);
    dfs(array,nums,numsSize,returnSize,column,0,0);
    *returnColumnSizes=column;
    return array;
}

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。