原题链接:https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/description/?envType=study-plan-v2&envId=coding-interviews
模拟,会超时
func lastRemaining(n int, m int) int {cnt := make([]int, n)for i := range cnt {cnt[i] = i}i := (m - 1) % len(cnt) for len(cnt) != 1 {cnt = append(cnt[:i], cnt[i+1:]...)i = (i + m - 1) % len(cnt)} return cnt[0]
}
然后就其实有一个推导公式
首先f(n, m)返回是坐标
那么其实有
f(n,m) = (m + f(n-1, m)) % n
就可以写如下的递归
退出条件是当n等于1时,可以理解只有index等于0这一个值了
func lastRemaining(n int, m int) int {if n == 1 {return 0 }return (m + lastRemaining(n-1, m)) % n
}