1. 求幸存数之和
1.1. 题目描述
给一个正整数数列 nums,一个跳数 jump,及幸存数量 left。
运算过程为:从索引0的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存 left 个数为止,然后返回幸存数之和。
约束:
0是第一个起跳点
起跳点和命中点之间间隔 jump 个数字,已被敲出的数字不计入在内。
跳到末尾时无缝从头开始(循环查找),并可以多次循环。
若起始时 left > len(nums) 则无需跳数处理过程。
1.2. 输入描述
第一行输入正整数数列
第二行输入跳数
第三行输入幸存数量
1.3. 用例
输入 1,2,3,4,5,6,7,8,9
4
3
输出 13
说明 从1(索引为0)开始起跳,中间跳过 4 个数字,因此依次删除 6,2,8,5,4,7。剩余1,3,9,返回和为13
1.4. 题目解析
经典的约瑟夫环
1.5. 代码
class Solution:
def __call__(self, nums: List[int], jump: int, left: int):
start = 1
while len(nums) > left:
start += jump
start %= len(nums)
nums.pop(start)
return sum(nums)