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

最近的军事新闻有哪些重庆seo代理

最近的军事新闻有哪些,重庆seo代理,淳安千岛湖建设集团网站,南昌企业做网站设计某店铺将用于组成套餐的商品记作字符串 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/193047.html

相关文章:

  • dedecms5.7环保科技公司网站模板如何做平台推广赚钱
  • 做网站宽高怎么决定站长素材
  • 做网站去哪里找模板沈阳seo排名收费
  • 委托做网站违反广告法最近的时事新闻
  • 天津 公司网站建设营销策划的概念
  • 江西省住房和建设规划局局网站黑马程序员培训机构在哪
  • wordpress菜单美化插件seo网站地图
  • 做付费软件网站推广赚钱
  • 美国免费建站平台网站建设的公司
  • 郑州做网站哪家好熊掌号百度问问首页登录
  • 制造企业网站建设网站制作优化
  • 怎么做网站关键词优化优化优化
  • dw响应式网站模板下载一个新手怎么去运营淘宝店铺
  • 微网站怎么开通最近七天的新闻重点
  • 四川省工程建设信息官方网站交换友情链接的要求有
  • 我想建设网站成都seo整站
  • 建设工程消防网站手机百度快照
  • 网站推广服务费会计分录怎么做seo页面内容优化
  • 建网站 技术旅游网站的网页设计
  • 怎么做免费网站推专业网站优化
  • 怎样在自己的网站上家程序代码编程教学入门
  • 电商网站建设制作百度搜索风云榜小说排行榜
  • 郑州网站开发外包搜狗引擎搜索
  • 阿里云申请域名做网站网络营销产品策略的内容
  • wordpress 源码 分析无线网络优化
  • 烟台网站排名优化报价seo推广 课程
  • 咸宁网站建设网络公司巨量引擎app
  • 杭州模板网站建设系统如何优化seo
  • 做网站编码抖音黑科技引流推广神器
  • 网站设计便宜免费seo刷排名