作者:whisper
链接:https://www.proprogrammar.com/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个数时的递推式,最后计算一下(但就是看不懂)
亲爱的读者:有时间可以点赞评论一下
月份 | 原创文章数 |
---|---|
202205 | 1 |
202204 | 1 |
202203 | 11 |
202201 | 2 |
202108 | 7 |
202107 | 3 |
202106 | 16 |
202105 | 10 |
202104 | 16 |
202103 | 56 |
202102 | 14 |
202010 | 3 |
202009 | 3 |
202008 | 7 |
202007 | 7 |
202006 | 10 |
202005 | 11 |
202004 | 22 |
202003 | 52 |
202002 | 44 |
202001 | 83 |
201912 | 52 |
201911 | 29 |
201910 | 41 |
201909 | 99 |
201908 | 35 |
201907 | 73 |
201906 | 121 |
201811 | 1 |
201810 | 2 |
201804 | 1 |
201803 | 1 |
201802 | 1 |
201707 | 1 |
全部评论