当前位置: 首页 > news >正文

北京网站建设策划方案建设银行个人网上银行app

北京网站建设策划方案,建设银行个人网上银行app,长春seo代理计费,网页设计论文引言某店铺将用于组成套餐的商品记作字符串 goods,其中 goods[i] 表示对应商品。请返回该套餐内所含商品的 全部排列方式 。 返回结果 无顺序要求,但不能含有重复的元素。 示例 1: 输入:goods “agew” 输出:[“aegw”,“aewg”,“ag…

某店铺将用于组成套餐的商品记作字符串 goods,其中 goods[i] 表示对应商品。请返回该套餐内所含商品的 全部排列方式 。
返回结果 无顺序要求,但不能含有重复的元素。
示例 1:
输入:goods = “agew”
输出:[“aegw”,“aewg”,“agew”,“agwe”,“aweg”,“awge”,“eagw”,“eawg”,“egaw”,“egwa”,“ewag”,“ewga”,“gaew”,“gawe”,“geaw”,“gewa”,“gwae”,“gwea”,“waeg”,“wage”,“weag”,“wega”,“wgae”,“wgea”]

  • 我的原始人解法,遍历+回溯,其实就相当于有几个字母就进行几重循环,用 set 记录每种结果来去重,用另一个 set 来排除已使用字母并在使用后回溯
  •   char[] data;// 结果 setSet<String> ans = new HashSet<>();// 回溯 setSet<Integer> set = new HashSet<>();public String[] goodsOrder(String goods) {data = goods.toCharArray();dfs("",0);String[] res = new String[ans.size()];res = ans.toArray(res);return res;}// cur:当前组合的字符串,从空字符串开始拼接public void dfs(String cur){// 根据字符串长度判断是否已经组成一个可能// 是就记录到结果 setif(cur.length()==data.length){ans.add(cur);return;}for(int i=0;i<data.length;i++){// 递归到下一层时依旧从 0~data.length 遍历,但是不能使用上一层已使用过的字符if(set.contains(i))continue;// 排除已使用的set.add(i);dfs(cur+data[i]);// 复原,保证每个字符都有机会成为头部字符,即无遗漏set.remove(i);}}
    
  • 他人题解:为了方案不遗漏,我们还可以通过固定第一位字符,再考虑剩下的字符的所有排列情况;再固定下一位,考虑剩下的所有情况…而所有情况的排列,我们通过原地交换字符来实现(这个算法的核心有一点,固定某位字符也可以看做交换,比如第 0 位和第 0 位交换,所以本质上我们就是通过从字符第 0 位到末尾第 n 位都尝试交换(0与0,0与1,0与2,0与3…),递归后尝试第 1 位到第 n 位的所有交换(1与1,1与2,1与3…),再递归尝试第 2 位到第 n 位交换的所有可能,以此保证每种可能性都不遗漏),例如 abc,我们先固定 a(交换 0,0),再固定 b(交换 1,1),最后剩下一位自然是直接可以返回一种结果了即 abc,回溯到 b 时,我们这次选择交换 1,2,得到 acb,再回溯到 a 时,我们上次是交换 0,0,这次我们选择交换 0,1,即交换 ab(此时为 [b,a,c]),然后第二位的 a 也是从 1,1 开始交换,再递归直接返回结果 bac,再回溯到 a,我们选择交换 1,2 了,最终得到 bca,然后又回溯到了最开始的 a,这次要选择交换 0,2 得到 [c,b,a]…,为了排除重复方案,我们在固定某个字符时,只需要保证它在某一位固定一次就够了,比如 aab,你在最外层遍历到第二个 a,其实就不需要再固定第二个 a 去递归了,因为得到的结果一定是重复的(固定 aa 其实就包含在固定 a 的结果中不是吗),因此我们同样需要一个 set 来记录,即剪枝操作,防止重复记录
  •   char[] data;List<String> res = new LinkedList<>();public String[] goodsOrder(String goods) {data = goods.toCharArray();dfs(0);return res.toArray(new String[res.size()]);}public void dfs(int x){// 只剩一个字符了还组合什么,直接返回if(x==data.length-1){res.add(String.valueOf(data));return;}Set<Character> set = new HashSet<>();for(int i=x;i<data.length;i++){if(set.contains(data[i]))continue;set.add(data[i]);// 交换,以保证每种可能性不遗漏swap(i,x);// 开启下层递归,即固定了第 0~x 位字符,要去固定第 x+1 位了dfs(x+1);// 复原交换,等别人用来进行其他的交换方式swap(i,x);}}void swap(int a, int b) {char tmp = data[a];data[a] = data[b];data[b] = tmp;}
    
http://www.yayakq.cn/news/793159/

相关文章:

  • 基于php技术的小型企业网站开发dz论坛源码
  • 保定网站seo服务自适应网站如何做移动适配
  • 桂阳县网站建设公司哪家好电子商务战略选择 网站建设建议
  • pythom 网站开发规范建设银行个人网上登录
  • 电子商务网站建设理解邯郸网页设计公司
  • 淘宝店铺网站建立简述网站的推广策略
  • wordpress适合做大型网站吗企业网站策划建设方案百度
  • 公司网站重新建站通知百度推广手机网站检测
  • 沧州英文网站制作wordpress主题放在那个文件夹
  • 网站建设一般好久到期定制彩票网站开发
  • 温州做网站的企业如何做网络推广公司
  • 郑州的做网站公司合肥网站建设方案案例
  • 深圳物流网站建设wordpress怎么搬迁
  • 提供网站建设优势个人网站app
  • 关于网站建设的调查问卷深圳营销型网站公司
  • 做视频网站用网站空间还是服务器百度网站建设是什么
  • 做暧暧小视频免费网站中国建设银行网站包头分行
  • 可以访问任何网站的浏览器网站建设自建服务器
  • 网站建设业务好做吗杭州广告公司有哪些
  • 一级a做爰网站免费页面模板微信
  • dede企业网站装修公司网站该怎么做
  • 服务器怎么装网站吗深圳网站制作公司电话
  • 发布网站制作开发商破产房子烂尾怎么办
  • 乐山网站建设培训学校双语 网站 数据怎么做
  • h5开发工具有哪些六六seo基础运营第三讲
  • aspnet网站开发实例北京市430场新闻发布会
  • 如何做电商网站电子商务网站建设与维护试题
  • 怎么做网站收广告费wordpress m3u8 插件
  • 个人网站建设制作优化大师绿色版
  • 深色大气网站模板可以免费发广告的app