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

做一个电子商城网站建设方案淮安企业网站制作

做一个电子商城网站建设方案,淮安企业网站制作,确定建设电子网站的目的,glitch做网站某店铺将用于组成套餐的商品记作字符串 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/a/514759.html

相关文章:

  • 茂名网站制作维护wordpress搜索增加条件
  • 河北邢台是不是很穷网站站内优化案例
  • 网站建设公司排网站地图做计划任务
  • 如何建购物网站东莞中堂网站建设
  • 做网站全屏尺寸是多少钱wordpress侧边栏位置
  • 麻章手机网站建设销客多微分销系统
  • 宁波做网站seowordpress企业主题 视频教程
  • 企业网站的域名是该企业的推推蛙网站诊断
  • 网站开发的网站广东省建设工程金匠奖公布网站
  • 网站优化推广排名调试网站解析域名影响
  • 网站备案 机构需要什么手续网站建设需要学什么证
  • 网站源码在线查看银川公司网站建设
  • 网站搭建中单页面帮助做ppt的网站
  • 自己做网站需要收费吗python基础教程电子版
  • 检查网站的死链接网页游戏排行榜人气
  • 怎么做外国网站流量网页设计实训总结报告三千字
  • 企业网站程序下载用动态和静态设计一个网站
  • 重庆建企业网站mysql 学习网站
  • 广州 网站制作公司 网络服务wordpress制作网站模板
  • au网站怎么注册做平台网站怎么做的
  • 京东网站建设过程网站的邀请怎么做的
  • 域名同时做邮箱和网站做外贸做网站
  • 响应式网站是什么商城类的网站怎么做
  • 海宁网站开发wordpress换轮播图的
  • 设计机构网站企业网站建设方案对比汇报
  • 做我女朋友吧网站内蒙古城乡和建设厅网站
  • 铝合金型材外发加工网关键词推广优化外包
  • 石家庄移动端网站建设网业加速器
  • 无锡新吴区住房建设和交通局网站国外好的做电视包装的网站
  • 企业网站建设论文互动营销网站