【LeetCode 简单题】83-猜数字大小

本文介绍了一个猜数字游戏的解题思路,通过二分查找法和递归法实现高效猜数。游戏设定为从1到n中猜中一个随机数,根据提示调整猜测范围,直至猜中。两种方法均在LeetCode上得到验证,执行效率高。

声明:

今天是第83道题。给定n,从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

题目:我们正在玩一个猜数字游戏。 游戏规则如下:
我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。
每次你猜错了,我会告诉你这个数字是大了还是小了。
你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-11 或 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值