圆圈中最后剩下的数

圆圈中最后剩下的数

题目描述

0, 1, ..., n-1这n个数字排成一个圆圈, 从数字0开始, 每次从这个圆圈里删除第m个数字. 求出这个圆圈里剩下的最后一个数字

第一次接触list容器, 迭代器也是第一次出现

主要是边界的判断

class Solution {
public:
    int LastRemaining_Solution(int n, int m)
    {
        if ((n < 1) || (m < 1)) {
            return -1;
        }
        
        list<int> numbers;
        for (int i = 0; i < n; i++) {
            numbers.push_back(i);
        }
        
        list<int>::iterator it = numbers.begin();
        while (numbers.size() > 1) {
            for (int i = 1; i < m; i++) {
                it++;
                if (it == numbers.end()) {
                    it = numbers.begin();
                }
            }
            
            list<int>::iterator next = ++it;    // 需判断next知否指向end
            if (next == numbers.end()) {
                next = numbers.begin();
            }
            
            --it;
            numbers.erase(it);
            it = next;
            
        }
        return *it;
    }
};
原文地址:https://www.cnblogs.com/hesper/p/10506581.html