声明:
今天是第83道题。给定n,从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:我们正在玩一个猜数字游戏。 游戏规则如下:
我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。
每次你猜错了,我会告诉你这个数字是大了还是小了。
你调用一个预先定义好的接口 guess(int num)
,它会返回 3 个可能的结果(-1
,1
或 0
):
-1 : 我的数字比较小
1 : 我的数字比较大
0 : 恭喜!你猜对了!
示例 :
输入: n = 10, pick = 6 输出: 6
解法1。常规解法,二分法,代码如下。
执行用时: 24 ms, 在Guess Number Higher or Lower的Python提交中击败了93.56% 的用户
# The guess API is already defined for you.
# @param num, your guess
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num):
class Solution(object):
def guessNumber(self, n):
"""
:type n: int
:rtype: int
"""
left = 1
right = n
while left <= right: # 注意这里是<=而非<
mid = (left+right)//2
if guess(mid) == 0:
return mid
elif guess(mid) == -1:
right = mid - 1
elif guess(mid) == 1:
left = mid + 1
else:
return -1
return -1 # 遍历完毕了也没有找到,失败
解法2。也有人用递归做。
执行用时: 24 ms, 在Guess Number Higher or Lower的Python提交中击败了93.56% 的用户
# The guess API is already defined for you.
# @param num, your guess
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num):
class Solution(object):
def guessNumber(self, n):
"""
:type n: int
:rtype: int
"""
return self.helper(1,n)
def helper(self,left,right):
if left > right:
return -1
mid = (left+right)//2
if guess(mid) == 0:
return mid
elif guess(mid) == -1:
return self.helper(left,mid-1)
else:
return self.helper(mid+1,right)
结尾
解法1:原创
解法2:LeetCode