作者:
链接:http://proprogrammar.com:443/article/857
声明:请尊重原作者的劳动,如需转载请注明出处
0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
示例 1:
输入: n = 5, m = 3 输出: 3
示例 2:
输入: n = 10, m = 17 输出: 2
限制:
1 <= n <= 10^5
1 <= m <= 10^6
难度:简单;标签:无;编程语言:JAVA
class Solution {
public int lastRemaining(int n, int m) {
List<Integer> circle = new LinkedList<>();
for(int i = 0; i < n; i++){
circle.add(i);
}
int div = 0;
while(circle.size() > 1){
div += m - 1;
div %= circle.size();
circle.remove(div);
}
return circle.get(0);
}
}
比较好理解,一个一个数减,直到最后只剩一下数
class Solution {
public int lastRemaining(int n, int m) {
int res = 0;
for(int i = 2; i <= n; i++){
res = (res + m) % i;
}
return res;
}
}
看不懂(数学和字符串问题是真的恶心),看官方题解吧,大致就是递推,由n个数的情况删一个到n-1个数,然后知道n和n-1个数时的递推式,最后计算一下(但就是看不懂)
亲爱的读者:有时间可以点赞评论一下
全部评论