可以利用一个向量直接求解
代码如下:

class Solution {
public:
    int LastRemaining_Solution(int n, int m) {
        if(0==n)  return -1;
        vector<int> array;
        for(int i = 0; i<n;++i)
        {
            array.push_back(1);
        }//孩子在用1表示出圈了用0表示


        int k = 0;//循环的时候用来在向量中循环的下标变量

       for(int j = 0; j<n-1;++j)//循环次数为n-1次,最终向量中只剩下1个元素为1 这个元素就是最终的幸运儿
        {
            for(int w = 0;w!=m;k++)  //w为每圈计数变量
            {
                if( n == k )
                    k=0;//用来设置首尾循环
                if(1== array[k])   //向量中改位置为1说明该位置孩子还在,计数加一
                    w++;
                if(m==w)
                    array[k]=0;   //数完一圈,把计数w为m的位置置0
            }
        }
        for(int i = 0;i<n;i++)
            if(1== array[i])
                return i;    //返回最终向量组中仍为1的下标位置
        return 0;
    }
};