国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

leetcode46. 全排列(回溯算法-java)

這篇具有很好參考價值的文章主要介紹了leetcode46. 全排列(回溯算法-java)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

leetcode46. 全排列

來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/permutations

題目描述

給定一個不含重復數(shù)字的數(shù)組 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 中的所有整數(shù) 互不相同

解題思路

排列問題本身就是讓你窮舉元素的位置
以[1,2,3]為例;
leetcode46. 全排列(回溯算法-java)
就是窮舉每個元素可以出現(xiàn)在任何位置,
我們用回溯算法的框架去做這道題:

首先看下回溯算法的框架::
result = []
void process(選擇列表):
if 滿足結(jié)束條件:
result.add(路徑)
return
for 選擇 in 選擇列表:
做選擇
backtrack(路徑, 選擇列表)
撤銷選擇

回到本題中.我們要做的選擇,就是讓每個位置上的元素可以出現(xiàn)在任何位置上.
對回溯框架稍加改造,就可以做出這道題了.

代碼演示

class Solution {
	//記錄答案
    List<List<Integer>> ans = new ArrayList<>();
    public List<List<Integer>> permute(int[] nums) {
        process(nums,0);
        return ans;
    }
	/**
	* 回溯算法
	* index 數(shù)組下標.遞歸到的位置
	*/
    public void process(int[]nums,int index){
    //base case 
        if(index == nums.length){
            ans.add(toList(nums)); 
            return ;   
        }
        //可以進行的選擇
        for(int i= index;i < nums.length;i++){
        	//全排列是對元素出現(xiàn)位置的窮舉,因此我們把他交換到別的位置上,繼續(xù)進行遞歸,
        	//來讓他去出現(xiàn)在不同的位置上
        	//這一步就是做選擇,
            swap(nums,i,index);
            process(nums,index + 1);
            //撤銷選擇
            swap(nums,i,index);
        }
    }
	/**
	* 交換
	*/
    public void swap(int[]nums,int i,int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
	/**
	* 數(shù)組轉(zhuǎn)換成 List
	*/
    public List<Integer> toList(int[]nums){
        List<Integer> ans = new ArrayList<>();
        for(int a : nums){
            ans.add(a);
        }
        return ans;
    }
}

回溯算法專題

leetcode78 子集

leetcode77. 組合

leetcode40. 組合總和 II

leetcode90. 子集 II

leetcode216. 組合總和 III

leetcode39. 組合總和文章來源地址http://www.zghlxwxcb.cn/news/detail-500277.html

到了這里,關于leetcode46. 全排列(回溯算法-java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Day31 46全排列 47全排列II 回溯去重tips 51N皇后 37解數(shù)獨

    Day31 46全排列 47全排列II 回溯去重tips 51N皇后 37解數(shù)獨

    給定一個 沒有重復 數(shù)字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] ?排列問題與組合問題的不同之處就在于,沒有startIndex,同時需要設置一個used數(shù)組,遍歷過的就設置成true,下次遇到時跳過。 給定一個可包含重

    2024年01月20日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】回溯算法公式化解題 leetcode經(jīng)典題目帶刷:全排列、組合、子集

    【數(shù)據(jù)結(jié)構(gòu)】回溯算法公式化解題 leetcode經(jīng)典題目帶刷:全排列、組合、子集

    一、什么是回溯算法 回溯算法(Backtracking Algorithm)是一種解決 組合問題 、 排列問題 、 選擇問題 等一類問題的常用算法。它通過嘗試所有可能的選擇來找到問題的解,當發(fā)現(xiàn)當前選擇不符合要求時,就回溯到之前的狀態(tài),然后嘗試其他的選擇。 1、基本思想: 從問題的起

    2024年02月11日
    瀏覽(35)
  • LeetCode刷題——46.全排列

    LeetCode刷題——46.全排列

    給定一個不含重復數(shù)字的數(shù)組 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 【遞歸實現(xiàn)】

    2024年02月12日
    瀏覽(25)
  • LeetCode 46 全排列

    全排列 給定一個不含重復數(shù)字的數(shù)組 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1: 示例 2: 示例 3: 提示: 1 = nums.length = 6 -10 = nums[i] = 10 nums 中的所有整數(shù) 互不相同 回溯法 這個問題可以看作有 n 個排列成一行的空格,我們需要從左往右依此填

    2024年01月19日
    瀏覽(15)
  • 【LeetCode-中等題】46. 全排列

    【LeetCode-中等題】46. 全排列

    1、子集去重版本 2、組合去重版本 3、子集非去重版本 這題中nums中的數(shù)各不相同,所以不需要去重: 而下面這題,nums中的數(shù)會存在重復值,就需要去重: 參考講解視頻:代碼隨想錄—全排列不去重版本 關鍵在于遞歸之后還要還原做回溯動作: 所以最后,我們統(tǒng)計到的res才

    2024年02月09日
    瀏覽(20)
  • LeetCode(力扣)46. 全排列Python

    LeetCode(力扣)46. 全排列Python

    https://leetcode.cn/problems/permutations/

    2024年02月09日
    瀏覽(19)
  • C++ | Leetcode C++題解之第46題全排列

    C++ | Leetcode C++題解之第46題全排列

    題目: 題解:

    2024年04月24日
    瀏覽(23)
  • leetcode77. 組合(回溯算法-java)

    leetcode77. 組合(回溯算法-java)

    來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/combinations 給定兩個整數(shù) n 和 k,返回范圍 [1, n] 中所有可能的 k 個數(shù)的組合。 你可以按 任何順序 返回答案。 示例 1: 輸入:n = 4, k = 2 輸出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 輸入:n = 1, k = 1 輸出:[[1]] 提示:

    2024年02月11日
    瀏覽(19)
  • 回溯算法篇-01:全排列

    回溯算法篇-01:全排列

    這道題屬于上一篇——“回溯算法解題框架與思路”中的 “元素不重復不可復用” 那一類中的 排列類問題。 我們來回顧一下當時是怎么說的: 排列和組合的區(qū)別在于,排列對“順序”有要求。比如 [1,2] 和 [2,1] 是兩個不同的結(jié)果。 這就導致了同一個元素 在同一條路徑中不

    2024年01月20日
    瀏覽(25)
  • LeetCode 1079. Letter Tile Possibilities【哈希表,回溯,動態(tài)規(guī)劃,排列組合】中等

    本文屬于「征服LeetCode」系列文章之一,這一系列正式開始于2021/08/12。由于LeetCode上部分題目有鎖,本系列將至少持續(xù)到刷完所有無鎖題之日為止;由于LeetCode還在不斷地創(chuàng)建新題,本系列的終止日期可能是永遠。在這一系列刷題文章中,我不僅會講解多種解題思路及其優(yōu)化,

    2024年02月10日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包