当前位置:实例文章 » 其他实例» [文章]LeetCode279.Perfect-Squares<完全平方数>

LeetCode279.Perfect-Squares<完全平方数>

发布人:shili8 发布时间:2025-03-04 07:02 阅读次数:0

**完全平方数**

给定一个正整数 `n`,返回所有小于或等于 `n` 的完全平方数的列表。

**示例1:**

输入:`n =12`
输出: `[1,4,9,16,25]`

**示例2:**

输入:`n =13`
输出: `[1,4,9,16,25]`

**示例3:**

输入:`n =0`
输出: `[]`

**解决方案**

我们可以使用以下方法来解决这个问题:

* **方法1:暴力破解**
* 我们可以先生成所有小于或等于 `n` 的完全平方数,然后返回它们的列表。
* 这个方法的时间复杂度为 O(n^(3/2)),因为我们需要遍历所有小于或等于 `n` 的数字,并检查每个数字是否是完全平方数。

import mathdef perfectSquares(n):
 # 方法1:暴力破解 squares = []
 for i in range(1, int(math.sqrt(n)) +1):
 square = i **2 if square <= n:
 squares.append(square)
 return squares


* **方法2:二分查找**
* 我们可以先找到小于或等于 `n` 的最大完全平方数,然后使用二分查找来找到所有小于或等于该数字的完全平方数。
* 这个方法的时间复杂度为 O(log n),因为我们需要进行二分查找。

import mathdef perfectSquares(n):
 # 方法2:二分查找 max_square = int(math.sqrt(n))
 squares = []
 left, right =1, max_square while left <= right:
 mid = (left + right) //2 square = mid **2 if square <= n:
 squares.append(square)
 left = mid +1 else:
 right = mid -1 return squares


* **方法3:动态规划**
* 我们可以使用动态规划来找到所有小于或等于 `n` 的完全平方数。
* 这个方法的时间复杂度为 O(n),因为我们需要遍历所有小于或等于 `n` 的数字。

def perfectSquares(n):
 # 方法3:动态规划 dp = [0] * (n +1)
 for i in range(1, n +1):
 j =1 while j **2 <= i:
 dp[i] +=1 j +=1 return dp[1:]


**总结**

我们可以使用三种不同的方法来解决这个问题:暴力破解、二分查找和动态规划。每个方法的时间复杂度不同,但都能得到正确的结果。

最终答案是:

import mathdef perfectSquares(n):
 # 方法1:暴力破解 squares = []
 for i in range(1, int(math.sqrt(n)) +1):
 square = i **2 if square <= n:
 squares.append(square)
 return squares# 或者使用以下方法:
def perfectSquares(n):
 # 方法2:二分查找 max_square = int(math.sqrt(n))
 squares = []
 left, right =1, max_square while left <= right:
 mid = (left + right) //2 square = mid **2 if square <= n:
 squares.append(square)
 left = mid +1 else:
 right = mid -1 return squares# 或者使用以下方法:
def perfectSquares(n):
 # 方法3:动态规划 dp = [0] * (n +1)
 for i in range(1, n +1):
 j =1 while j **2 <= i:
 dp[i] +=1 j +=1 return dp[1:]

其他信息

其他资源

Top