/* * @lc app=leetcode.cn id=69 lang=c * * [69] x 的平方根 * * https://leetcode-cn.com/problems/sqrtx/description/ * * algorithms * Easy (34.81%) * Total Accepted: 25.4K * Total Submissions: 73.1K * Testcase Example: '4' * * 实现 int sqrt(int x) 函数。 * * 计算并返回 x 的平方根,其中 x 是非负整数。 * * 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 * * 示例 1: * * 输入: 4 * 输出: 2 * * * 示例 2: * * 输入: 8 * 输出: 2 * 说明: 8 的平方根是 2.82842..., * 由于返回类型是整数,小数部分将被舍去。 * * */ int mySqrt(int x) { long i = 1; if(x==1){ return 1; } for(i=1;i<=x/2;i++){ if(i*i==x){ return i; } else if(i*i<x&&(i+1)*(i+1)>x){ return i; } } return 0; }
这里要注意取值范围,用long比较合适。思路也挺简单的,循环到目标值的一半即可,然后两个判断,要么相等,要么当前值平方小于目标值,当前值加1的平方大于目标值。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
python:
# # @lc app=leetcode.cn id=69 lang=python3 # # [69] x 的平方根 # # https://leetcode-cn.com/problems/sqrtx/description/ # # algorithms # Easy (34.81%) # Total Accepted: 25.4K # Total Submissions: 73.1K # Testcase Example: '4' # # 实现 int sqrt(int x) 函数。 # # 计算并返回 x 的平方根,其中 x 是非负整数。 # # 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 # # 示例 1: # # 输入: 4 # 输出: 2 # # # 示例 2: # # 输入: 8 # 输出: 2 # 说明: 8 的平方根是 2.82842..., # 由于返回类型是整数,小数部分将被舍去。 # # # class Solution: def mySqrt(self, x: int) -> int: low = 0 mid = x // 2 # //代表整数除法 high = x while low <= high: #注意判断条件 if mid * mid > x: high = mid - 1 elif mid * mid < x: low = mid + 1 else: return mid mid = (low + high) // 2 return mid #向下取整
python用的是二分法。