• 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)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    用友U8 | 【出纳管理】添加日记账时,为什么日期选不了之前的日期?
    用友U8 | 【总账】结账时提示:该凭证已被别的用户锁定,请稍候在试...
    用友U8 | 【实施导航】实施导航进度条一直显示没完成
    利用Action方法委托重构switch接口
    关于wcf序列化后的压缩示例
    sql常用的命令
    WebBrowser通过cookie自动登录网站
    SqlServer大数据的分区方案
    WebBrowser 登录windows集成验证的网站
    SQL大批量插入数据的方式(多表关联) .
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12316456.html
Copyright © 2020-2023  润新知