一.题目:
消除游戏。共有两种消除的方式,第一种是从左向右,从第一个位置开始间隔着消除;第二种是从右向左,从最后一个位置开始间隔这消除。两种方式交替进行,直至只剩下一个数停止,求最后能留下的最后的结果是哪个数。
Example:
Input:
n = 9,
1 2 3 4 5 6 7 8 9
2 4 6 8
2 6
6
Output:
6
二.解题思路:
先试了下暴力的解法,果然通不过,看了网上的解法,豁然开朗。
解题思想如下:
代码如下:
class Solution(object):
def lastRemaining(self, n):
"""
:type n: int
:rtype: int
"""
def leftToright(n):
if n == 1: return 1
if n == 2: return 2
if n & 1 == 1:
return 2 * rightToleft((n-1)/2)
else:
return 2 * rightToleft(n/2)
def rightToleft(n):
if n == 1: return 1
if n == 2: return 1
if n & 1 == 1:
return 2 * leftToright((n-1)/2)
else:
return 2 * leftToright(n/2) -1
return leftToright(n)