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

不用登录的游戏站长工具seo排名

不用登录的游戏,站长工具seo排名,wordpress内部邮件插件,创意设计海报某店铺将用于组成套餐的商品记作字符串 goods,其中 goods[i] 表示对应商品。请返回该套餐内所含商品的 全部排列方式 。 返回结果 无顺序要求,但不能含有重复的元素。 示例 1: 输入:goods "agew" 输出:[&…

某店铺将用于组成套餐的商品记作字符串 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"]

LCR 157. 套餐内商品的排列顺序 - 力扣(LeetCode)

很经典的回溯题目

我们回顾一下回溯三部曲:

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

第一次写的时候忘记去掉重复元素了,但是回溯基本上是对的,没有加剪枝:

class Solution {public String[] goodsOrder(String goods) {if(goods == null){return new String[0];}ArrayList<String> results = new ArrayList<>();StringBuilder result = new StringBuilder();backtracing(result,goods,results);return results.toArray(new String[0]);}public void backtracing(StringBuilder result, String goods, ArrayList<String> results){if(result.length() == goods.length()){results.add(result.toString());return;}for(int i = 0; i < goods.length(); i++){result = result.append(goods.charAt(i));backtracing(result,goods,results);result = result.deleteCharAt(result.length() - 1);}}
}

使用HashSet,并使用used数组记录该元素是否被使用过:

class Solution {public String[] goodsOrder(String goods) {if(goods == null){return new String[0];}HashSet<String> results = new HashSet<>();StringBuilder result = new StringBuilder();boolean[] used = new boolean[goods.length()]; // 记录字符是否被使用过backtracing(result,goods,results,used);return results.toArray(new String[0]);}public void backtracing(StringBuilder result, String goods, HashSet<String> results,boolean[] used){if(result.length() == goods.length()){results.add(result.toString());return;}for(int i = 0; i < goods.length(); i++){if (used[i]) {continue;}used[i] = true;result = result.append(goods.charAt(i));backtracing(result,goods,results,used);result = result.deleteCharAt(result.length() - 1);used[i] = false;}}
}

其实还有一个问题,像刚才上面的算法,如果是abb这样的字符串,其实是会产生两个abb的,但是我们用HashSet过滤掉了。但是这样会导致算法性能不太好。应该加上这样一个条件判断更合适:

if (i > 0 && goods.charAt(i) == goods.charAt(i - 1) && !used[i - 1]) {continue;
}

如果当前字符等于上一个字符并且上一个字符没有被使用过,那么就跳过。

但是好像在力扣里加不加这个算法性能没太大区别。

http://www.dtcms.com/wzjs/104718.html

相关文章:

  • 成立一个做网站的公司成本爱站网关键词挖掘机
  • 合肥网站制作联系方式常用的网络推广的方法有哪些
  • 国外域名注册网站网络运营推广怎么做
  • 纺织网站建设方案百度收录网站要多久
  • 上海网站建设设计公司seo顾问公司
  • 在线音乐网站 用什么做西安百度提升优化
  • php网站语言切换功能如何做万网注册域名查询
  • 做网站有什么好书籍抖音seo优化软件
  • 有没有专门做帽子的网站产品营销推广策略
  • 淘宝上面建设网站安全么公司网站制作
  • 如何拿qq空间做网站拓客引流推广
  • 海外营销网站建设百度网站怎么提升排名
  • 网站建设资料清单网络营销概述ppt
  • 建站公司专业团队优化大师电视版
  • 交友网站该如何做seo培训机构哪家好
  • 网站建设销售要懂什么百度竞价推广是什么
  • 建微网站有什么好处软文广告
  • 微网站制作工具整站优化报价
  • 江苏省建设厅官方网站公式公告网球排名即时最新排名
  • 电子商务 网站建设杭州seo服务公司
  • 做网站的客户需求百度百家号
  • 用java做计算机销售网站开发百度爱采购优化
  • 武汉网站外包公司谷歌paypal官网注册入口
  • 北京双井网站建设百度公司电话是多少
  • 福建住房和城乡建设厅政府网站seo简单优化
  • 网站内部链接导向卖链接的网站
  • 潍坊恒信建设集团网站seo推广多少钱
  • 个人建站模板国家市场监管总局
  • Wordpress禁止搜索内容搜索引擎优化的目的是
  • 低价网站建设方案营销推广手段有什么