原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
n个人站成一排,按从1到n编号。最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾,传递方向就会改变,队伍会继续沿相反方向传递枕头。
- 例如,当枕头到达第
n个人时,TA 会将枕头传递给第n - 1个人,然后传递给第n - 2个人,依此类推。给你两个正整数
n和time,返回time秒后拿着枕头的人的编号
n = 4, time = 5
2
队伍中枕头的传递情况为:1 -> 2 -> 3 -> 4 -> 3 -> 2 。
5 秒后,枕头传递到第 2 个人手中。
n = 3, time = 2
3
队伍中枕头的传递情况为:1 -> 2 -> 3 。
2 秒后,枕头传递到第 3 个人手中。
模拟 数学
一共两个方向传递:队首向队尾、队尾向队首
从头传到尾需要的次数是n-1次,我们只需要求出cnt= time/(n-1),看cnt的奇偶就知道下一次传递的方向是哪个了,接着还需要传递 time%(n-1)次,这时分类讨论即可
- class Solution {
- public:
- int passThePillow(int n, int time) {
- int cnt = time/(n-1);
- if(cnt&1){
- return n-(time%(n-1));
- }else{
- return time%(n-1)+1;
- }
-
- }
- };