编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。
下一个人继续从 1 开始报数。
n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?
数据范围: 1≤n,m≤1000
进阶:空间复杂度 O(1),时间复杂度 O(n)
java:
import java.util.*;
public class Solution {
/**
*
* @param n int整型
* @param m int整型
* @return int整型
*/
public int ysf (int n, int m) {
// write code here
int dp = 0; //先按照索引号进行报数
for(int i = 2; i<=n; i++){
dp = (dp+m)%i;
}
return dp+1; //索引号对应的值为索引号+1
}
}
注意:
- K神是真的很厉害
- 记住状态转移公式dp[i] = (dp[i-1]+m)%i
- 力扣中编号从0开始,牛客中编号从1开始,注意最后结果+1