要求:n个数每次删除往前第m个
思路:一点也不简单的题,但不能想复杂了,f(n)为最后删除的数,f(n)走一次丢给f(n-1)然后从m%n开始,为什么能丢给f(n-1),因为正常来说f(n-1)是0到n-2,fn删了一个后要加个偏移,也就是说,最终的结果存在一一映射的关系,所以能够递推,就这么简单。代码数组可以去掉
class Solution {
public:
int lastRemaining(int n, int m) {
vector<int> dp(n+1);
for(int i=2;i<=n;++i)
dp[i]=(dp[i-1]+m)%i;
return dp[n];
}
};