算法每日一練 (11)

💢歡迎來到張胤塵的技術站
💥技術如江河,匯聚眾志成。代碼似星辰,照亮行征程。開源精神長,傳承永不忘。攜手共前行,未來更輝煌💥

文章目錄

  • 算法每日一練 (11)
    • 全排列
      • 題目描述
      • 解題思路
      • 解題代碼
        • `c/c++`
        • `golang`
        • `lua`

官方站點: 力扣 Leetcode

算法每日一練 (11)

全排列

題目地址:全排列

題目描述

給定一個不含重復數字的數組 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。

示例 1:

輸入:nums = [1,2,3]
輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

輸入:nums = [0,1]
輸出:[[0,1],[1,0]]

示例 3:

輸入:nums = [1]
輸出:[[1]]

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整數 互不相同

解題思路

  • 整體解題流程采用回溯的思路。
  • 首先遞歸終止條件,如果當前狀態已經滿足了子集的條件,則返回到上一層。在本題中,遞歸終止條件就是當前索引到達了數組末尾,則無需向下繼續遞歸。
  • 緊接著就是在遞歸的過程中,枚舉所有可能的選擇,并針對每種情況都進行處理。
  • 從當前索引開始,嘗試交換每個位置的元素,然后遞歸的調用 backtrack 方法處理每一種情況。
  • 緊接著回溯是關鍵步驟,在每次遞歸返回后,需要撤銷當前的選擇,恢復到上一步的狀態,以便嘗試其他可能性。
  • 最后當所有的排列全部列舉完畢后,返回 result 結果集即可。

解題代碼

c/c++
#include <vector>class Solution
{
public:std::vector<std::vector<int>> permute(std::vector<int> &nums){std::vector<std::vector<int>> result;std::vector<int> current = nums;backtrack(result, current, 0);return result;}private:void backtrack(std::vector<std::vector<int>> &result, std::vector<int> &current, int start){if (start == current.size()){result.push_back(current);return;}for (int i = start; i < current.size(); ++i){std::swap(current[start], current[i]);backtrack(result, current, start + 1);std::swap(current[start], current[i]);}}
};
golang
func permute(nums []int) [][]int {result := [][]int{}backtrack(&result, &nums, 0)return result
}func backtrack(result *[][]int, current *[]int, start int) {sz := len(*current)if start == sz {perm := make([]int, sz)copy(perm, *current)*result = append(*result, perm)return}for i := start; i < sz; i++ {(*current)[i], (*current)[start] = (*current)[start], (*current)[i]backtrack(result, current, start+1)(*current)[i], (*current)[start] = (*current)[start], (*current)[i]}return
}
lua
local function copyTable(t)local copy = {}for i = 1, #t docopy[i] = t[i]endreturn copy
endlocal function backtrack(result, current, start)local sz = #currentif sz == start thentable.insert(result, copyTable(current))returnendfor i = start, sz docurrent[i], current[start] = current[start], current[i]backtrack(result, current, start + 1)current[i], current[start] = current[start], current[i]end
endlocal function permute(nums)local result = {}backtrack(result, nums, 1)return result
end

🌺🌺🌺撒花!

如果本文對你有幫助,就點關注或者留個👍
如果您有任何技術問題或者需要更多其他的內容,請隨時向我提問。

在這里插入圖片描述

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

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

相關文章

《Spring日志整合與注入技術:從入門到精通》

1.Spring與日志框架的整合 1.Spring與日志框架進行整合&#xff0c;日志框架就可以在控制臺中&#xff0c;輸出Spring框架運行過程中的一些重要的信息。 好處&#xff1a;方便了解Spring框架的運行過程&#xff0c;利于程序的調試。 Spring如何整合日志框架 Spring5.x整合log4j…

《SQL性能優化指南:新手如何寫出高效的數據庫查詢

新手程序員如何用三個月成為SQL高手&#xff1f;萬字自學指南帶你彎道超車 在數據為王的時代&#xff0c;掌握SQL已成為職場新人的必修課。你可能不知道&#xff0c;僅用三個月系統學習&#xff0c;一個零基礎的小白就能完成從數據庫萌新到SQL達人的蛻變。去年剛畢業的小王就是…

【Unity】在項目中使用VisualScripting

1. 在packagemanager添加插件 2. 在設置中進行初始化。 Edit > Project Settings > Visual Scripting Initialize Visual Scripting You must select Initialize Visual Scripting the first time you use Visual Scripting in a project. Initialize Visual Scripting …

JConsole 在 Linux 上的使用

JConsole 在 Linux 上的使用指南 1. 啟動 JConsole 遠程監控 Linux 服務器上的 JVM 進程 1.1 修改 JMX 配置&#xff0c;允許遠程訪問 在 Linux 服務器 啟動 Java 應用時&#xff0c;需要加上 -Djava.rmi.server.hostname<服務器IP>&#xff0c;完整的啟動參數如下&am…

個人記錄,Unity資源解壓和管理插件

就是經典的兩個AssetStudio 和 Ripper 沒有什么干貨&#xff0c;就是記錄一下&#xff0c;內容沒有很詳細 AssetStudio 說錯了&#xff0c;AssetStudio比較出名&#xff08;曾經&#xff09;&#xff0c;但好像墮落了 是&#xff0c;AssetBundlExtractor 這個工具有個好處就…

編譯skia

1.準備工具 (1)vs2019,到微軟官方下載下載 Visual Studio Tools - 免費安裝 Windows、Mac、Linux (2)ninja,下載地址:Releases ninja-build/ninja GitHub (3)gn,下載地址:https://chrome-infra-packages.appspot.com/p/gn/gn/windows-amd64 (4)skia,下載地址:git …

vue 知識點整理

1.data為什么是一個函數而不是對象 維度對象形式函數形式數據隔離性所有實例共享同一對象&#xff0c;導致數據污染每個實例擁有獨立數據副本復用安全性不適用于可復用組件支持組件安全復用語言機制引用傳遞引發副作用函數返回值實現作用域隔離&#xff08;閉包&#xff09;框…

DeepSeek-Open WebUI部署

1.DeepSeek部署-Win版本 2.DeepSeek部署-Linux版本 3.DeepSeek部署-一鍵部署(Linux版本) 4.DeepSeek部署-進階版本(LinuxGPU) 5.DeepSeek部署-基于vLLM部署 前面部署了vLLM版本以后&#xff0c;訪問它比較麻煩。如何才能更好的實現訪問呢&#xff0c;這個就是我們今天要講的…

(vue)elementUi中el-upload上傳附件之后 點擊附件可下載

(vue)elementUi中el-upload上傳附件之后 點擊附件可下載 handlePreview(file) {console.log(file)const fileUrl https://.../zzy/ file.urlconst a document.createElement(a)a.href fileUrla.download file.namea.style.display none// a.setAttribute(download, file.…

你認為 Java 的優勢是什么?

你認為 Java 的優勢是什么? 回答重點 我覺得可以從跨平臺、垃圾回收、生態、面向對象四個方面來闡述。 跨平臺 首先 Java 是跨平臺的,不同平臺執行的機器碼是不一樣的,而 Java 因為加了一層中間層 JVM,所以可以做到一次編寫多平臺(如 Windows、Linux、macOS)運行,即…

SpringBoot——Maven篇

Spring Boot 是一個用于快速開發基于 Spring 框架的應用程序的工具。它具有許多特性&#xff0c;其中一些重要的特性包括&#xff1a; 1. 自動配置&#xff1a;Spring Boot 提供了自動配置的機制&#xff0c;可以根據應用程序的依賴和環境自動配置應用程序的各種組件&#xff…

搭建基于chatgpt的問答系統

一、語言模型&#xff0c;提問范式與 Token 1.語言模型 大語言模型&#xff08;LLM&#xff09;是通過預測下一個詞的監督學習方式進行訓練的&#xff0c;通過預測下一個詞為訓練目標的方法使得語言模型獲得強大的語言生成能力。 a.基礎語言模型 &#xff08;Base LLM&…

leetcode0056. 合并區間 - medium

1 題目&#xff1a;合并區間 官方難度 - 中等 以數組 intervals 表示若干個區間的集合&#xff0c;其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間&#xff0c;并返回 一個不重疊的區間數組&#xff0c;該數組需恰好覆蓋輸入中的所有區間 。 示例 1…

系統開發資源

一、前端篇 1.1 菜鳥CSS教程 1.2 HTML/CSS/JS 在線工具 二、后端篇 三、其他篇 3.1 菜鳥官網 3.2 黑馬程序員學習路線 3.3 根據地區獲取經緯度

計算機視覺cv2入門之圖像的讀取,顯示,與保存

在計算機視覺領域&#xff0c;Python的cv2庫是一個不可或缺的工具&#xff0c;它提供了豐富的圖像處理功能。作為OpenCV的Python接口&#xff0c;cv2使得圖像處理的實現變得簡單而高效。 示例圖片 目錄 opencv獲取方式 圖像基本知識 顏色空間 RGB HSV 圖像格式 BMP格式 …

k8s面試題總結(十五)

1.如何使用Kubernetes進行多環境部署&#xff08;如開發&#xff0c;測試和生產環境&#xff09;&#xff1f; 使用命名空間&#xff08;namespaces&#xff09;&#xff1a; 命名空間是用于邏輯隔離和資源分組的一種方式&#xff0c;可以為每個環境創建單獨的命名空間。 2.使…

linux中yum和wget指令的區別

yum 和 wget 都是 Linux 上的下載工具&#xff0c;但它們的用途、下載方式和適用場景不同。以下是它們的 主要區別&#xff1a; 1. yum 是軟件包管理器&#xff0c;wget 是文件下載工具 功能yumwget用途安裝、更新和管理 RPM 軟件包從 HTTP/HTTPS/FTP 下載文件工作方式通過 yu…

性能優化:服務器性能影響網站加載速度分析

問題&#xff1a;網站訪問加載慢是受部署服務器的核數、帶寬、內存影響嗎&#xff1f;&#xff1f; 文章目錄 前言一、服務器核數&#xff08;CPU&#xff09;二、帶寬三、內存&#xff08;RAM&#xff09;四、其他潛在影響因素五、排查與優化步驟六、總結 前言 網站訪問加載速…

【python】一文掌握 Conda 指令 (anaconda備忘清單)

文章目錄 入門常用基礎命令環境與包管理包與源管理更改環境導出環境配置其它額外提示這是開始使用 conda 命令的快速參考備忘單,初次學習可參考 這里 參考: Anaconda文檔官網命令Cheat sheetConda cheatsheet PDF入門 常用基礎命令 命令說明conda info查看 conda 的一系列基…

Qt:繪圖API

目錄 初識繪圖 繪圖API的使用 繪制形狀(QPaintEvent) 繪制文字(畫筆QPen) 內部填充(畫刷QBrush) 繪制圖片(QPixmap) 初識繪圖 我們前面學習 Qt 主要是學 Qt 的各種控件&#xff0c;本質上都是畫出來的 都是一些常用的東西&#xff0c;Qt 已經提前畫好了&#xff0c;拿過…