3.17阿里Java后端,电商 sku 的全排列算法
3.17阿里Java后端
字典
有英文字典:Map<Character, String[]>,示例如下:
a : [a, an]
b : [bus, bird]
c : [car, can, card]
...
z : [zone]
输入 一个a-z组成的字符串,字符串每一位表示字典的key
输出 key映射的单词组成句子的集合(单词之间空格隔开)
示例:
输入:
ab
输出:
"a bus"
"an bus"
"a bird"
"an bird"
思路
递归回溯,也是电商 sku 的全排列算法。
答案
import java.util.*;
class Solution {
public static void main(String[] args) {
Map<Character, String[]> map = new HashMap<>();
String[] str1 = new String[2];
str1[0] = "a";
str1[1] = "an";
map.put('a', str1);
String[] str2 = new String[2];
str2[0] = "bus";
str2[1] = "bird";
map.put('b', str2);
String[] str3 = new String[3];
str3[0] = "car";
str3[1] = "can";
str3[2] = "card";
map.put('c', str3);
Solution solution = new Solution();
Scanner scanner = new Scanner(System.in);
String next = scanner.next();
List<List<String>> list = new ArrayList<>();
for (char c : next.toCharArray()) {
list.add(new ArrayList<>(Arrays.asList(map.get(c))));
}
for (List<String> strings : solution.test(list)) {
System.out.println(strings);
}
}
public List<List<String>> test(List<List<String>> in) {
List<List<String>> out = new ArrayList<>();
List<String> list = new ArrayList<>();
dfs(in, out, list, 0);
return out;
}
private void dfs(List<List<String>> in, List<List<String>> out, List<String> list, Integer index) {
if(list.size() == in.size()) {
out.add(new ArrayList<>(list));
return;
}
List<String> items = in.get(index);
for (int i = 0; i < items.size(); i++) {
list.add(items.get(i));
dfs(in, out, list, index + 1);
list.remove(list.size() - 1);
}
}
}
测试
输入:abc
输出
[a, bus, car]
[a, bus, can]
[a, bus, card]
[a, bird, car]
[a, bird, can]
[a, bird, card]
[an, bus, car]
[an, bus, can]
[an, bus, card]
[an, bird, car]
[an, bird, can]
[an, bird, card]
3.17阿里Java后端,电商 sku 的全排列算法的更多相关文章
- Java生鲜电商平台-Java后端生成Token架构与设计详解
Java生鲜电商平台-Java后端生成Token架构与设计详解 目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交. 技术选型:用开源的JWT架构. 1. ...
- Java生鲜电商平台-商品的spu和sku数据结构设计与架构
Java生鲜电商平台-商品的spu和sku数据结构设计与架构 1. 先说明几个概念. 电商网站采用在商品模块,常采用spu+sku的数据结构算法,这种算法可以将商品的属性和商品的基本信息分离,分开维护 ...
- Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战
Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...
- Java生鲜电商平台-商家支付系统与对账系统架构实战
Java生鲜电商平台-商家支付系统与对账系统架构实战 说明:关于生鲜电商平台,支付系统是连接消费者.商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付 ...
- Java生鲜电商平台-优惠券系统的架构设计与源码解析
Java生鲜电商平台-优惠券系统的架构设计与源码解析 电商后台:实例解读促销系统 电商后台系统包括商品管理系统.采购系统.仓储系统.订单系统.促销系统.维权系统.财务系统.会员系统.权限系统等,各系统 ...
- Java生鲜电商平台-商城后台架构与原型图实战
Java生鲜电商平台-商城后台架构与原型图实战 说明:生鲜电商平台的运营平台,其中需要很多的功能进行管理.目前把架构与原型图实战分享给大家,希望对大家有用. 仪表盘/首页,简单统计,报表页,运营快捷口 ...
- Java生鲜电商平台-商品基础业务架构设计-商品设计
Java生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...
- Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计
Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计(服务订单履约系统) 说明: 电商之下,我们几乎能从电商平台上买到任何我们日常需要的商品,但是对于很多商品来说,用户购买发货后,只是整个交易流程 ...
- Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战
Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...
- Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...
随机推荐
- vue input输入框关键字筛选检索列表数据展示
想必大家在项目开发中难免会用到关键字筛选的功能,正好这次项目有需求要做这一块,就整理一下vue的input输入框输入关键字检索数据列表的代码.下面直接上代码: html: <!-- 筛选demo ...
- python生成一个WAV文件的正弦波
import numpy as np import matplotlib.pyplot as plt T = 1.0 / sample_rate #周期 x = np.arange(0, 1.0, T ...
- File.createTempFile()
File.createTempFile()的两个参数,是前缀和后缀,临时文件的文件名,会在前缀和后缀中各截取一部分,再拼接上随机数进行生成: 推荐手动指定目录,尽量指定到项目路径下,默认的磁盘位置,有 ...
- 标量子查询加聚合函数sql改写一
标量子查询的语句: select /*+ GATHER_PLAN_STATISTICS dwtest */ empno, (select count(*) from DEPT1 b where b.i ...
- lua-路径加载lua文件-函数返回值,访问lua文件中的变量
lua文件如下: print("ddhdhh")function login(username,pswd)if username =="ms" and pswd ...
- 配置Centos8网络绑定
配置Centos8网络绑定 原理: 在物理网卡两块之上创建一块虚拟主卡, 逻辑上是一主双从, 按不同的模式负载运行,常用模式如主备或并行提供双倍带宽等.模式: 可选参数"mode=act ...
- Fortran 笔记之 继承和聚合
继承(类扩展)和聚合 参考自Introduction to Modern Fortran for the Earth System Sciences 我们在3.3部分的开头提到过,OOP范式通常会导致 ...
- Flutter 3.+更新记录
Flutter3.3稳定版出来了,于是决定把之前Flutter工程的代码更新下其中里面有些涉及到组件的弃用 在此记录 ElevatedButton 代替了 RaisedButton 为带阴影的悬浮按钮 ...
- SourceInsight中inc文件中的符号不能同步问题
解决方法: 打开Options->Preferences->Syntax Formatting->File Types,然后选中对应的开发语言,如C/C++ Source File, ...
- padding&margin
margin是盒子的外边距,即盒子与盒子之间的距离,而padding是内边距,是盒子的边与盒子内部元素的距离. 鞋盒里面的鞋到 盒子的距离设置为 padding ,而 鞋盒到鞋架的距离设置为margi ...