• 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)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    HTML5 GeoLocation 地理定位
    HTML5 LocalStorage 本地存储
    JS-事件代理(委托)
    面向对象(封装、继承、多态)
    js图片预加载
    jQuery 事件
    svn无法验证
    Ext.data.Store(转)
    ExtJS实现Excel导出(转)
    <![CDATA[ ]]> 意思
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12316456.html
Copyright © 2020-2023  润新知