算法Day30 餐厅的套餐

news/2025/2/23 3:30:48/

餐厅的套餐

Description

假设有一家餐厅,菜单上有n道菜可供选择,现在需要从中选择k道菜组成一份套餐。请设计一个算法,返回所有可能但互不相同的菜品组合。

Input

不同菜品的id各不相同,分别为1,2,3…n,输入内容依次为n和k的值,输入内容之间使用空格隔开
1 ≤ n ≤ 20
1 ≤ k≤n

Output

请你按照数组中元素由小到大的顺序输出结果,若两个数组中前m个元素相同,则根据第m+1个元素判断数组大小

例如:

n = 4 , k = 2时输出顺序为:

[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]

输出内容要求:

输出结果中不同数字之间使用空格分开并顺序排列即可,输出结果中不含有回车

Sample

在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;public class Main {public static ArrayList<Integer> all = new ArrayList<>();public static StringBuilder result = new StringBuilder();public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int group = scanner.nextInt();for(int i = 0;i<n;i++){all.add(i+1);}//输出for(int i =1;i<=n-group+1;i++) {ArrayList<String> temp = backTrack(i, group, 1);temp.stream().forEach(k->add(k));}System.out.print(result.toString());}public static void add(String s){result.append(s+" ");}public static ArrayList<String> backTrack(int start,int group,int s){ArrayList<String> temp = new ArrayList<>();if(s==group){temp.add(String.valueOf(start));return temp;}//1-nfor(int i = start;i<all.size();i++){{ArrayList<String> temp1 = backTrack(i + 1, group, s + 1);for (String k : temp1) {temp.add(start + " " + k);}}}return temp;}
}

思路

按照题解使用回溯法,对每一层进行遍历,遍历至group层即可,我这里使用string保存信息。
大规模时使用result保存信息,我首先使用的直接是String类型保存
如图,直接超时在这里插入图片描述
之后采取StringBuilder在这里插入图片描述
在对大长度字符串处理时,还是StringBuilder比较合适


http://www.ppmy.cn/news/1267237.html

相关文章

区块链技术的未来,了解去中心化应用的新视角

小编介绍&#xff1a;10年专注商业模式设计及软件开发&#xff0c;擅长企业生态商业模式&#xff0c;商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地&#xff1b;扶持10余个电商平台做到营收过千万&#xff0c;数百个平台达到百万会员&#xff0c;欢迎咨询。 随着…

生产派工自动化:MES系统的关键作用

随着制造业的数字化转型和智能化发展&#xff0c;生产派工自动化成为了提高生产效率、降低成本&#xff0c;并实现优质产品生产的关键要素之一。制造执行系统&#xff08;MES&#xff09;在派工自动化中发挥着重要作用&#xff0c;通过实时数据采集和智能调度&#xff0c;优化生…

MicroSD 卡 使用读卡器 读取速度测试

设备 - - 电脑为m.2固态硬盘 usb口为USB3.2 gen2接口(即支持1GB/s的接口) cpu: amd3600 测试方案1 直接MicroSD卡放入读卡器测试 38MB/s 从sd卡复制到本地C盘 测试方案2 MicroSD卡使用闪迪的SD卡套套上之后一起插入读卡器 76MB/s 从sd卡复制到本地C盘

Docker容器:Centos7搭建Docker镜像私服harbor

目录 1、安装docker 1.1、前置条件 1.2、查看当前操作系统的内核版本 1.3、卸载旧版本(可选) 1.4、安装需要的软件包 1.5、设置yum安装源 1.6、查看docker可用版本 1.7、安装docker 1.8、开启docker服务 1.9、安装阿里云镜像加速器 1.10、设置docker开机自启 2、安…

Vue 3 + Tailwind CSS:打造现代化项目的完美组合

Vue 3 Tailwind CSS&#xff1a;打造现代化项目的完美组合 本篇教程将向你介绍如何将 Tailwind CSS 与 Vue 3 项目搭配使用&#xff0c;为你的项目提供现代化的 UI 呈现和开发体验。通过本文的逐步演示和示例代码&#xff0c;你将很快掌握在 Vue 3 中集成和使用 Tailwind CSS…

Python三种方法实现topk问题(源码)

# topK问题 数组中有n个元素求前k个最大的数 # 1. 快排或小顶堆排n个数 返回前k个数 --- 时复为O(nnlog_2nk) # 2. 第一次优化&#xff1a;首先根据n数组建立一个大顶堆 每次获取arr[0](并将其移除) 原地移除的方法是将arr[0]与arr[-1]对调 后在arr[0:-1)时向下调整法 反复上…

动能资讯 | 智慧汽车—城市NOA迎爆发

在特斯拉引领的 TransformerBev 架构驱动下&#xff0c;智驾算法趋近于端到端的智驾大模型&#xff0c;使得智能驾驶开始步入城市 NOA 新时代。 消费者认知增强&#xff0c;未来市场空间广阔。伴随城市 NOA 在 23-24 年的落地和普及、L3 法规在年内的落地&#xff0c;行业 0-1…

计算机网络(第一章)——概述

1 网络、互连网(互联网)和因特网 网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。多个网络还可以通过路由器互连起来&#xff0c;这样就构成了一个覆盖范围更大的网络&#xff0c;即互联网&#xff08;或互连网因此&#xff0c;互联网是“网络的网络(Netwrok …