leetcode--46--全排列

題目:
給定一個(gè)沒有重復(fù)數(shù)字的序列,返回其所有可能的全排列。

示例:

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

題目鏈接:https://leetcode-cn.com/problems/permutations

思路:
1、采用廣度優(yōu)先搜索的思路,先假設(shè)全排列里只用了一個(gè)元素,然后再迭代的加入其他的元素,每次加入元素時(shí)分別對(duì)之前的全排列的結(jié)果在所有位置均可插入當(dāng)前元素
2、需要注意的是需要考慮添加元素時(shí)不能改變?cè)瓉淼慕Y(jié)果,因此使用深拷貝來進(jìn)行備份

Python代碼

import copy

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """

        if not nums:
            return []

        ret = [[nums[0]]]

        for i in range(1,len(nums)):
            item = nums[i]
            ret_cp = copy.deepcopy(ret)    // 深拷貝上一輪的返回值,避免對(duì)原始值產(chǎn)生修改
            curr = []
            for ls in ret_cp:
                for j in range(len(ls)+1):
                    ls_cp = copy.deepcopy(ls)   // 深拷貝
                    ls_cp.insert(j, item)
                    curr.append(ls_cp)
            ret,curr = curr,ret
    
        return ret

C++代碼:

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        if(nums.empty()){
            return {};
        }
        vector<vector<int>> ret;
        vector<int> curr;
        curr.push_back(nums[0]);
        ret.push_back(curr);

        for(int i=1; i<nums.size(); i++){
            int item = nums[i];
            vector<vector<int>> ret_cp(ret);
            vector<vector<int>> temp;
            for(auto ls:ret_cp){
                for(int j=0; j<=ls.size(); j++){
                    vector<int> ls_cp(ls);
                    ls_cp.insert(ls_cp.begin()+j, item);
                    temp.push_back(ls_cp);
                }
            }
            ret.swap(temp);
        }
        return ret;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目 給定一個(gè)沒有重復(fù)數(shù)字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3]輸出:[[1,2,3],...
    禾木清清閱讀 423評(píng)論 0 0
  • 題目描述 全排列 給定一個(gè)沒有重復(fù)數(shù)字的序列,返回其所有可能的全排列。 示例 輸入: [1,2,3]輸出:[[1,...
    一只可愛的檸檬樹閱讀 258評(píng)論 0 0
  • 46. 全排列給定一個(gè)沒有重復(fù)數(shù)字的序列,返回其所有可能的全排列。示例:輸入: [1,2,3]輸出:[[1,2,3...
    杏仁小核桃閱讀 3,188評(píng)論 0 0
  • PySpider (pip install pyspider) 使用步驟 安裝完成后在命令行輸入:pyspider...
    dawsonenjoy閱讀 401評(píng)論 0 0
  • 4月7號(hào) 星期六 多云 第134篇 三天假期轉(zhuǎn)眼就結(jié)束了,時(shí)間過的好快,開學(xué)倆星期又該期中...
    李少聰媽媽閱讀 117評(píng)論 0 0

友情鏈接更多精彩內(nèi)容