1. 程式人生 > >leecode第四十六題(全排列)

leecode第四十六題(全排列)

ack 二維數組 全排列 vector style 符號 ans 字符 alt

技術分享圖片

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        int len=nums.size();
        vector<vector<int>> res;
        
        if(len==0)//特殊情況
        {
            vector<int> res1;
            res.push_back(res1);
            
return res; } if(len==1)//叠代返回條件 { res.push_back(nums); return res; } for(int i=0;i<len;i++) { vector<int> nums1=nums;//用來復制原數組 int temp=nums1[0]; nums1[0]=nums1[i]; nums1[i]
=temp;//交換首字符與第i個位置的值 vector<int> nums2; for(int j=1;j<len;j++) nums2.push_back(nums1[j]);//nums2用來存儲除首字符後的值 vector<vector<int>> ans=permute(nums2);//得到nums2的所有可能排列 int length=ans.size(); for
(int j=0;j<length;j++) { vector<int> nums3; nums3.push_back(nums1[0]);//先把首字符打進去 for(int k=0;k<len-1;k++) nums3.push_back(ans[j][k]);//再把後續的打進去 res.push_back(nums3);//把這length個都充入res返回 } } return res; } };

分析:

痛快,在分析好要做什麽之後,哢哢哢就寫出來了,除了一處筆誤,其他暢通無阻啊,一次提交就過了。

但是暴露的問題有,這個題情況偏簡單,幾乎沒有邊界條件,所以我分析案例不難。其次就是在叠代和循環上猶豫了好久,因為叠代中輸入返回被指定了,寫起來如上那麽復雜,循環想了半天感覺更難寫了,所以直接就用叠代硬懟了。還有就是特殊情況那裏,沒想到在leecode裏,沒有初始化的二維數組是啥都沒有,本來想初始化並返回0並加個全局符號變量說明,但是題目要求返回全空,我就跟著這麽寫了。

leecode第四十六題(全排列)