小M有一个独特的方式来收拾家中的盘子。每次用餐后,他会将盘子按照他们的序号顺序叠放。盘子的序号都是唯一的整数,并且在收拾前就是递增的。小M的叠放规则是,每一堆盘子的序号都是连续递增的,并且至少包含3个盘子。需要编写程序帮助小M确定盘子的叠放方式。
例如,输入的盘子序号是 [-3, -2, -1, 2, 10, 15, 16, 18, 19, 20],按照小M的规则,连续递增序列 -3, -2, -1 可以叠在一起表示为 -3--1,而 18, 19, 20 可以叠在一起表示为 18-20。不满足连续递增至少3个的,如 2, 10, 15, 16 都应单独列出。
输入参数 plates: 一个整数数组,表示盘子的序号 n: 盘子总数 测试样例 样例1:
输入:plates = [-3, -2, -1, 2, 10, 15, 16, 18, 19, 20], n = 10 输出:"-3--1,2,10,15,16,18-20"
样例2:
输入:plates = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20], n = 20 输出:"-6,-3-1,3-5,7-11,14,15,17-20"
样例3:
输入:plates = [1, 2, 7, 8, 9, 10, 11, 19], n = 8 输出:"1,2,7-11,19" 输入处理:首先,我们需要处理输入的盘子序列。这个序列已经是有序的。 分堆逻辑:我们需要遍历这个序列,找出符合条件的堆。一个堆的条件是: 堆中的盘子序号是连续递增的。 堆中的盘子数量至少为3个。 输出格式化:根据堆的情况,格式化输出。如果堆中只有一个盘子,直接输出该盘子的序号;如果堆中有多个盘子,输出起始编号和终止编号,并用“-”连接。 遍历数组:使用 while 循环遍历数组,找到每个堆的起始和结束位置。 判断堆的条件:如果堆中的盘子数量大于等于3,则格式化为 起始编号-终止编号,否则逐个输出盘子序号。 格式化输出:使用 StringBuilder 来构建最终的字符串,确保输出的格式正确。 遍历数组:确保在遍历数组时,正确找到每个堆的起始和结束位置。 判断堆的条件:确保堆中的盘子数量大于等于3时,正确格式化为 起始编号-终止编号,否则逐个输出盘子序号。 格式化输出:确保输出的格式正确,并且在每个堆之间添加逗号分隔符。