給定乙個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
示例:輸入: [1,2,2]
輸出:[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
]詳細解釋關注 b站 【c語言全**】學渣帶你刷leetcode 不走丟
/**
* 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 compare(const void* a, const void* b)
//函式二:遞迴法求子集
//1,結束條件 numssize==0 為
//2,遞迴邏輯 if(nums[n]!=nums[n-1]) f(n)=f(n-1) + (f(n-1)每個元素增加n)
//3,if(nums[n]==nums[n-1]) f(n)=f(n-1)+(f(n-1)所新增元素再增加n)
int recusivesubset(int* nums, int** pret, int* pcolsize, int*pretsize, int numssize)
//2,遞迴呼叫
itmpnum = recusivesubset(nums, pret, pcolsize, pretsize, numssize - 1);
//3,在 f(n-1) 的基礎上得到 f(n)
if((numssize > 1) && (nums[numssize - 1] == nums[numssize - 2]))
}else
itmpnum = itmpsize;
}return itmpnum;
}int** subsetswithdup(int* nums, int numssize, int* returnsize, int** returncolumnsizes)
學渣帶你刷Leetcode0035搜尋插入位置
給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4 輸入...
學渣帶你刷Leetcode0063不同路徑 II
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m...
學渣帶你刷Leetcode0066加一
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2,1 輸出 4,3,...