LeeCode 39.組合總和

給你一個?無重復元素?的整數數組?candidates?和一個目標整數?target?,找出?candidates?中可以使數字和為目標數?target?的 所有?不同組合?,并以列表形式返回。你可以按?任意順序?返回這些組合。

candidates?中的?同一個?數字可以?無限制重復被選取?。如果至少一個數字的被選數量不同,則兩種組合是不同的。?

對于給定的輸入,保證和為?target?的不同組合數少于?150?個。

示例?1:

輸入:candidates = [2,3,6,7], target = 7
輸出:[[2,2,3],[7]]
解釋:
2 和 3 可以形成一組候選,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一個候選, 7 = 7 。
僅有這兩種組合。

示例?2:

輸入: candidates = [2,3,5], target = 8
輸出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:

輸入: candidates = [2], target = 1
輸出: []

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates?的所有元素?互不相同
  • 1 <= target <= 40

答案:

int** combinationSum(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes)/*** 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** combinationSum(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes) { // LeeCode 39.組合總和// returnSize 存儲返回的二維數組的長度。returnColumnSizes存儲返回的二維數組中的每個數組的長度*returnSize = 0;if (target < 2) {return NULL;}*returnColumnSizes = (int*)malloc(150 * sizeof(int));if (*returnColumnSizes == NULL) {return NULL;}// candidates[i] >= 2, 所以臨時數組長度最大為 target / 2 + 1int* temp = (int*) malloc((target / 2 + 1) * sizeof(int)); if (!temp) return NULL;int** res = (int**) malloc(150 * sizeof(int*));if (!res) return NULL;zuhe(candidates, candidatesSize, target, 0, temp, 0, res, returnSize, returnColumnSizes);free(temp);return res;
}// target為還差多少值, idx表示從哪個索引的數開始嘗試(前面的數的各種情況已經嘗試過了,不用再嘗試)。
void zuhe(int* candidates, int candidatesSize, int target, int idx, int* temp, int tempSize, int** res, int* returnSize, int** returnColumnSizes) {if (target == 0) {// 已滿足,保存結果int* arr_ = (int*)malloc(tempSize * sizeof(int));if (!arr_) return;memcpy(arr_, temp, tempSize * sizeof(int));*(res + *returnSize) = arr_;*(*returnColumnSizes + *returnSize) = tempSize;*returnSize = *returnSize + 1;}for (int i = idx; i < candidatesSize; i++) {if (candidates[i] > target) {continue;}// 可以加的情況,選中該數temp[tempSize++] = candidates[i];// 再遞歸選給臨時數組下一位賦值。 注意,這里idx參數值必選傳i,不能傳idx,防止選到重復的組合。組合的臨時數組中當前在選的數還可以選,但前面選過的數不能再選zuhe(candidates, candidatesSize, target - candidates[i], i, temp, tempSize, res, returnSize, returnColumnSizes);// 回退,不選這個數了tempSize--;}
}

測試代碼:

void printArr(int** arr, int size, int* returnColumnSizes);void testLeeCode39(void) { // 組合總和int nums[] = { 2, 3, 6, 7 };int target = 7;int numsSize = 4;int returnSize; // 用于接受結果二維數組的長度。int* returnColumnSizes; // 用來接受結果二維數組的每個元素(即子數組)的長度int** res = combinationSum(nums, numsSize, target, &returnSize, &returnColumnSizes);printArr(res, returnSize, returnColumnSizes);// 釋放內存for (int i = 0; i < returnSize; i++) {free(res[i]);}free(res);free(returnColumnSizes);
}void printArr(int** arr, int size, int* returnColumnSizes) {printf("[");int isFirst = 1;for (int i = 0; i < size; i++) {if (isFirst) {isFirst = false;}else {printf(",");}int isSubFirst = 1;printf("[");for (int j = 0; j < returnColumnSizes[i]; j++) {if (isSubFirst) {isSubFirst = false;}else {printf(",");}printf("%d", arr[i][j]);}printf("]");}printf("]\n");
}

打印:

ok. 提交到LeeCode:

ok.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95909.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Python3.10.6與jieba庫的中文分詞模型接口在Windows Server 2022上的實現與部署教程

該教程詳細闡述了在Windows Server 2022上基于Python3.10.6與jieba庫實現并部署中文分詞模型接口的完整流程&#xff0c;涵蓋技術棧&#xff08;Python3.10.6、jieba、Flask、Waitress、Nginx、NSSM等&#xff09;與環境準備&#xff08;Python安裝、虛擬環境配置、依賴包安裝及…

java基礎(九)sql基礎及索引

一、NoSQL 和 SQL 數據庫的區別1. 基本概念SQL 數據庫&#xff08;關系型數據庫&#xff09; 代表產品&#xff1a;SQL Server, Oracle, MySQL (開源), PostgreSQL (開源)。 存儲方式&#xff1a;結構化數據&#xff0c;邏輯上以二維表&#xff08;行 & 列&#xff09;形式…

ffmpeg-調整視頻分辨率

ffmpeg -i input.mp4 -vf scale1280:720 output_1280x720.mp4-i input.mp4: 指定輸入視頻文件。-vf scale1280:720: 使用 scale 視頻濾鏡&#xff0c;將視頻寬度設置為 1280 像素&#xff0c;高度設置為 720 像素。output_1280x720.mp4: 指定輸出視頻文件。 16&#xff1a;9 常…

前端vue3+后端spring boot導出數據

有個項目需要提供數據導出功能。 該項目前端用vue3編寫&#xff0c;后端是spring boot 2&#xff0c;數據庫是mysql8。 工作流程是&#xff1a;1&#xff09;前端請求數據導出 2&#xff09;后端接到請求后&#xff0c;開啟一個數據導出線程&#xff0c;然后立刻返回信息到前端…

基于RK3588的微電網協調控制器:實現分布式能源的智能調控與優化運行

微電網協調控制器方案通過集成先進算法和實時數據技術&#xff0c;實現分布式能源的光伏、儲能、風電等設備的智能協調與優化運行?12。關鍵功能包括&#xff1a;?協同優化調度?&#xff1a;采用模型預測控制&#xff08;MPC&#xff09;動態調整光伏出力、儲能充放電策略和負…

機器學習——TF-IDF文本特征提取評估權重 + Jieba 庫進行分詞(以《紅樓夢》為例)

使用 Jieba 庫進行 TF-IDF 關鍵詞提取&#xff08;以《紅樓夢》為例&#xff09;在中文文本分析中&#xff0c;TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09; 是最常用的關鍵詞提取方法之一。它通過評估詞在單個文檔中的出現頻率和在所有文檔中的…

一周學會Matplotlib3 Python 數據可視化-多子圖及布局實現

鋒哥原創的Matplotlib3 Python數據可視化視頻教程&#xff1a; 2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程講解利用python進行數據可視化 科研繪圖-Matplotlib&#xff0c;學習Matplotlib圖形參數基本設置&…

Spark執行計劃與UI分析

文章目錄1.Spark任務階段劃分1.1 job&#xff0c;stage與task1.2 job劃分1.3 stage和task劃分2.任務執行時機3.task內部數據存儲與流動4.根據sparkUI了解Spark執行計劃4.1查看job和stage4.2 查看DAG圖4.3查看task1.Spark任務階段劃分 1.1 job&#xff0c;stage與task 首先根據…

16-docker的容器監控方案-prometheus實戰篇

文章目錄一.前置知識1.監控與報警2.監控系統的設計3.監控系統的分類二、prometheus概述1.什么是prometheus2.prometheus的歷史3.為什么要學習prometheus4.prometheus的使用場景5.prometheus的宏觀架構圖6.prometheus軟件下載地址三、部署prometheus server監控軟件1.同步集群時…

集成電路學習:什么是Image Processing圖像處理

Image Processing,即圖像處理,是計算機視覺、人工智能、多媒體等領域的重要基礎。它利用計算機對圖像進行分析、加工和處理,以達到預期目的的技術。以下是對圖像處理的詳細解析: 一、定義與分類 定義: 圖像處理是指用計算機對圖像進行分析,以達到所需結果的技術,又稱…

基于Android的隨身小管家APP的設計與實現/基于SSM框架的財務管理系統/android Studio/java/原生開發

基于Android的隨身小管家APP的設計與實現/基于SSM框架/android Studio/java/原生開發

Web 開發 16

1 在 JavaScript&#xff08;包括 JSX&#xff09;中&#xff0c;函數體的寫法和返回值處理在 JavaScript&#xff08;包括 JSX&#xff09;中&#xff0c;函數體的寫法和返回值處理確實有一些簡潔的語法規則&#xff0c;尤其是在箭頭函數中。這些規則常常讓人混淆&#xff0c;…

超高車輛碰撞預警系統如何幫助提升城市立交隧道安全?

超高車輛帶來的安全隱患立交橋和隧道的設計通常基于常規車輛的高度標準。然而&#xff0c;隨著重型運輸業和超高貨車的增加&#xff0c;很多超高車輛會誤入這些限高區域&#xff0c;造成潛在的安全隱患。超高車輛與立交橋梁或隧道頂蓋發生碰撞時&#xff0c;可能導致結構受損&a…

三種變量類型在局部與全局作用域的區別

一、基本概念作用域&#xff08;Scope&#xff09;&#xff1a; 全局作用域&#xff1a;定義在所有函數外部的變量或函數&#xff0c;具有文件作用域&#xff0c;生命周期為整個程序運行期間。局部作用域&#xff1a;定義在函數、塊&#xff08;如 {}&#xff09;或類內部的變量…

InfluxDB 數據遷移工具:跨數據庫同步方案(二)

六、基于 API 的同步方案實戰6.1 API 原理介紹InfluxDB 提供的 HTTP API 是實現數據遷移的重要途徑。通過這個 API&#xff0c;我們可以向 InfluxDB 發送 HTTP 請求&#xff0c;以實現數據的讀取和寫入操作。在數據讀取方面&#xff0c;使用GET請求&#xff0c;通過指定數據庫名…

JVM安全點輪詢匯編函數解析

OpenJDK 17 源碼的實現邏輯&#xff0c;handle_polling_page_exception 函數在方法返回時的調用流程如下&#xff1a;調用流程分析&#xff1a;棧水印檢查觸發跳轉&#xff1a;當線程執行方法返回前的安全點輪詢時&#xff08;MacroAssembler::safepoint_poll 中 at_returntrue…

Linux怎么查看服務器開放和啟用的端口

在 Linux 系統中&#xff0c;可以通過以下方法查看 服務器開放和啟用的端口。以下是詳細的步驟和工具&#xff0c;適用于不同場景。1. 使用 ss 查看開放的端口ss 是一個現代化工具&#xff0c;用于顯示網絡連接和監聽的端口。1.1 查看正在監聽的端口運行以下命令&#xff1a;ba…

XF 306-2025 阻燃耐火電線電纜檢測

近幾年隨著我國經濟快速的發展&#xff0c;電氣火災呈現高發趨勢&#xff0c;鑒于電線電纜火災的危險性&#xff0c;國家制定了阻燃&#xff0c;耐火電線電纜的標準&#xff0c;為企業&#xff0c;建設方&#xff0c;施工方等的生產&#xff0c;選材提供了指引。XF 306-2025 阻…

【Java|第二十篇】面向對象(十)——枚舉類

目錄 &#xff08;四&#xff09;面向對象&#xff1a; 12、枚舉類&#xff1a; &#xff08;1&#xff09;概述&#xff1a; &#xff08;2&#xff09;枚舉類的定義格式&#xff1a; &#xff08;3&#xff09;編譯與反編譯&#xff1a; &#xff08;4&#xff09;Enum類…

第二十一天-OLED顯示實驗

一、OLED顯示原理1、OLED名詞解釋OLED可以自發光&#xff0c;無需背光光源。2、正點原子OLED模塊模塊總體概述模塊接口模式選擇MCU與模塊外部連接8080并口讀寫過程OLED顯存因為要進行顯示&#xff0c;所以需要有顯存。顯存容量為128 x 8 byte&#xff0c;一個點用一位表示。SSD…