LeetCode[中等] 279.完全平方

devtools/2024/12/23 4:30:43/

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149 和 16 都是完全平方数,而 3 和 11 不是。

1 思路 动态规划

dp[i]为和为i的完全平方数的最少数量。

任意正整数n都是n个1的和,因此和为n的完全平方数的最少数量不超过n。

dp初始化:对于所有0<=i<=n,dp[i] = i。

动态规划边界情况dp[0] = 0。

当 i≥1 时,对于满足 1 ≤ j^2 ≤ i 的每个整数 j,都可以将 i 表示成 (i−j^2)+j^2,其中 j^2 是小于等于 i 的完全平方数,当 dp[i−j^2] 已知时,和为 i 的完全平方数的最少数量不超过 dp[i−j^2]+1,遍历所有的 j 之后即可得到 dp[i]。因此动态规划的状态转移方程是:对于所有满足 1≤j^2≤i 的整数 j,dp[i]=min{dp[i−j^2]}+1。

public class Solution {public int NumSquares(int n) {int[] dp = new int[n + 1];for(int i = 0; i <= n; i++)dp[i] = i;for(int i = 1; i <= n; i++){for(int j = 1; j * j <= i; j++)dp[i] = Math.Min(dp[i], dp[i - j * j] + 1);}return dp[n];}
}

复杂度分析

  • 时间复杂度:O(n * n^1/2​),其中 n 是给定的整数。状态数是 O(n),每个状态的计算时间是 O(n​),因此时间复杂度是 O(n * n^1/2​)。

  • 空间复杂度:O(n),其中 n 是给定的整数。需要创建长度为 n+1 的数组 dp。

2 四平方和定理

四平方和定理证明了任意一个正整数都可以被表示为至多四个正整数的平方和。这给出了本题的答案的上界。

public class Solution {public int NumSquares(int n) {if (IsPerfectSquare(n)) {return 1;}if (CheckAnswer4(n)) {return 4;}for (int i = 1; i * i <= n; i++) {int j = n - i * i;if (IsPerfectSquare(j)) {return 2;}}return 3;}// 判断是否为完全平方数public bool IsPerfectSquare(int x) {int y = (int) Math.Sqrt(x);return y * y == x;}// 判断是否能表示为 4^k*(8m+7)public bool CheckAnswer4(int x) {while (x % 4 == 0) {x /= 4;}return x % 8 == 7;}
}

 

 


http://www.ppmy.cn/devtools/120105.html

相关文章

某星球预约抢票脚本

Python脚本是一个自动化工具,用于监控即将开售的演出票务信息,并更新一个Markdown文件(`README.md`)来显示即将开售的演出列表。它利用了网络请求来获取信息,并对数据进行了处理和格式化,最后通过特定的API发送通知。让我们逐步分析这段代码的主要功能和组成部分。 类和函…

diffusion vs GAN

参考blog&#xff1a;深入浅出完整解析AIGC时代中GAN系列模型的前世今生与核心知识 diffusion vs GAN 对比 生成速度 GAN架构通常比Diffusion架构更快&#xff0c;因为GAN只需要一次前向传播即可生成样本&#xff0c;而Diffusion模型需要多次采样迭代来逐步生成最终图像。同时…

10款好用的开源 HarmonyOS 工具库

大家好&#xff0c;我是 V 哥&#xff0c;今天给大家分享10款好用的 HarmonyOS的工具库&#xff0c;在开发鸿蒙应用时可以用下&#xff0c;好用的工具可以简化代码&#xff0c;让你写出优雅的应用来。废话不多说&#xff0c;马上开整。 1. efTool efTool是一个功能丰富且易用…

前端BOM常用操作

BOM操作常用命令详解及代码案例 BOM&#xff08;Browser Object Model&#xff09;是浏览器对象模型&#xff0c;是浏览器提供的JavaScript操作浏览器的API。BOM提供了与网页无关的浏览器的功能对象&#xff0c;虽然没有正式的标准&#xff0c;但现代浏览器已经几乎实现了Java…

828华为云征文 | 利用FIO工具测试Flexus云服务器X实例存储性能

目录 一、Flexus云服务器X实例概要 1.1 Flexus云服务器X实例摘要 1.2 产品特点 1.3 存储方面性能 1.4 测评服务器规格 二、FIO工具 2.1 安装部署FIO 2.2 主要性能指标概要 三、进行压测 3.1 测试全盘随机读IO延迟 3.2 测试全盘随机写IO延迟 3.3 测试随机读IOPS 3.4…

Git 详细安装教程(详解 Git 安装过程的每一个步骤)

Git 详细安装教程&#xff08;详解 Git 安装过程的每一个步骤&#xff09;_git安装-CSDN博客

科技展厅方案新视角:布局优化促进深度互动体验?

近年来&#xff0c;大多数展厅设计方案开始引用大量的数字技术&#xff0c;来丰富和优化展览的内容形式&#xff0c;而在众多的展厅设计类型中&#xff0c;科技主题无疑成为了当下主流的选择类型之一&#xff0c;它的方案制作也更加注重数字技术&#xff0c;那么&#xff0c;本…

WPF入门教学二十二 多线程与异步编程

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;多线程和异步编程是非常重要的概念&#xff0c;因为它们可以帮助你创建响应性更好的应用程序。WPF的UI线程负责处理所有的用户界面操作&#xff0c;如果你的代码在UI线程上执行耗时操作&#xff0c…