如何用指定值对数字列表进行从后往前的动态减法运算
实现从后往前的动态减法处理列表
以下是符合需求的Kotlin实现代码,会从列表末尾开始遍历,用指定的初始值逐个执行减法,直到剩余值归零,最终返回处理后的列表:
fun main() { var subtraction = 250 val list = mutableListOf(300, 200, 100) val resultList = mutableListOf<Int>() // 从列表最后一个元素向前遍历 for (i in list.lastIndex downTo 0) { val currentElement = list[i] when { subtraction <= 0 -> { // 剩余减法值已耗尽,直接保留原元素 resultList.add(currentElement) } subtraction >= currentElement -> { // 剩余值足够抵消当前元素,更新剩余值,不保留当前元素 subtraction -= currentElement } else -> { // 剩余值不足抵消当前元素,计算剩余元素值,耗尽剩余值 resultList.add(currentElement - subtraction) subtraction = 0 } } } // 反转列表以恢复原顺序 resultList.reverse() println(resultList) // 输出: [300, 50] }
代码逻辑说明
- 遍历方向:通过
list.lastIndex downTo 0实现从列表最后一个元素到第一个元素的反向遍历 - 状态判断:
- 当
subtraction已归零,直接将当前元素加入结果列表 - 当剩余值大于等于当前元素,用剩余值减去当前元素,更新剩余值,当前元素被完全抵消不保留
- 当剩余值小于当前元素,计算当前元素减去剩余值的结果加入列表,同时将剩余值置0
- 当
- 顺序修正:因为是反向遍历添加元素,最后需要反转结果列表,恢复原列表的顺序
示例验证
针对题目中的输入:
- 初始
subtraction=250,列表[300,200,100] - 第一步处理100:250-100=150,剩余值更新为150,不保留100
- 第二步处理200:150<200,计算200-150=50加入结果,剩余值置0
- 第三步处理300:剩余值已归零,直接加入结果
- 反转结果列表后得到
[300,50],完全符合需求
内容的提问来源于stack exchange,提问作者Mariano Muendane
相关产品推荐
相关产品推荐

