【回溯-字母全排列&&dfs】LCR 157. 套餐内商品的排列顺序
某店铺将用于组成套餐的商品记作字符串 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"]
提示:
1 <= goods.length <= 8
public String[] goodsOrder(String s) { List<String> ans=new ArrayList<>(); dfs(s.toCharArray(),0,ans); return ans.toArray(new String[ans.size()]); } private void dfs(char[] cs,int start,List<String> ans){ if(start==cs.length){ ans.add(new String(cs)); return; } int[] map=new int[128]; for(int i=start;i<cs.length;i++){ if(map[cs[i]]!=0) continue; map[cs[i]]++; swap(cs,i,start); dfs(cs,start+1,ans); swap(cs,i,start); } } private void swap(char[] cs,int i,int j){ char c=cs[i]; cs[i]=cs[j]; cs[j]=c; }
算法笔试题解-回溯系列 文章被收录于专栏
算法笔试题解-回溯系列