51. 字符串的排序

 爆搜问题

看这个,别看下面的视频 https://www.bilibili.com/video/av9830088

对应代码

 1 class Solution {
 2 public:
 3     vector<string> result;
 4     
 5     vector<string> Permutation(string str) {
 6         if(str.length() == 0) 
 7             return result;
 8         int n = str.size();
 9         dfs(str,0,n-1);
10         
11         //对结果进行排序
12         sort(result.begin(), result.end());
13         
14         return result;
15     } 
16     void dfs(string &str, int begin, int end)
17     {
18         //递归结束的条件:一条字符串的最后一位也排序完成
19         if(begin == end) 
20         {
21             result.push_back(str);
22             return;
23         }
24         
25         for(int i = begin;i <= end; i++)
26         {
27             //如果字符串相同,则不交换
28             if(str[i] == str[begin] && i != begin) 
29             {
30                 continue;
31             }
32             
33             swap(str[begin],str[i]);
34             dfs(str, begin+1, end);
35             swap(str[begin],str[i]);
36             
37         }
38             
39     }
40 };

视频https://www.bilibili.com/video/av41342810?p=2

代码 字符串的排序

class Solution {
public:
    
    vector<vector<int>> res;
    vector<int> path;
    vector<vector<int>> permutation(vector<int>& nums) {
        path.resize(nums.size());
        dfs(nums, 0, 0, 0);//数组,当前要放的元素位置,上一个放的位置,当前的放的状态。
        return res;
    }
    void dfs(vector<int> & nums, int u, int start, int state) {  //state为二进制数
        if (u == nums.size()) {  //如果遍历完所有数,就说明找到了方案
            res.push_back(path);//保存方案
            return;
        }
        if (!u || nums[u] != nums[u-1]) start = 0;//如果是第一个数,或者当前数和上一个数不同,那么就可以从第0位开始枚举
        //如果下一个数和当前数相同
        for (int i = start; i < nums.size(); i ++){  //枚举每个位置,判断位置是不是被用过了
            if(! (state >> i & 1)){//这个数的二进制表示中第i位是不是1,如果不是,表示这个位置没有被用过
                path[i] = nums[u];//把当前数放到这个位(坑)上
                dfs(nums, u + 1, i + 1, state + (1 << i));//上一个放的位置是i;state + (1 << i):把state的第i位从0变成1
            }
        }
    }
};
带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
原文地址:https://www.cnblogs.com/make-big-money/p/12316456.html