前端算法-完全平方数

简介: 前端算法-完全平方数

题目

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

输入: n = 12
输出: 3 
解释: 12 = 4 + 4 + 4

思路一

我们先创建一个array变量,他是一个做为储存状态的数组,他的长度是形参n+1,默认值全为0,我们用该数组来记录当前数值的所需完全平方数的最少数量,然后再使用循环对形参n进行循环,在循环中我们创建一个min变量他的值是Number的最大值,然后再使用循环对第一层循环的i变量进行循环,我们在该循环中使用Math.min函数获取当前min变量和array数组的i-j*j的最小值,然后我们将其得出的最小值重新赋值给min变量,依次往复,求出当前所需完全平方数的最少数量,然后将min变量+1赋值给array的i变量位置,最后我们将array的形参n位置的数据返回出去即可

var numSquares = function(n) {
    let array = new Array(n+1).fill(0); 
    for(let i=1; i<=n; i++){ 
        let min = Number.MAX_VALUE; 
        for(let j=1; j*j<=i; j++){ 
            min = Math.min(min, array[i - j * j]); 
        }
        array[i] = min + 1;
    }
    return array[n]; 
};

思路二

我们在先声明一个s变量,它的值是形参n与0.5进行乘方在使用Math.floor方法向下取整后的值,然后我们在判断当前s变量和s变量想乘是否等于n,如果等于则返回1,如果不是我们接下来声明f变量他的值默认是n,然后再判断f和8相余是否等于7,如果是则直接返回4,如果不是则进行循环,判断当前f变量和4相余是否等于0,如果是则一直进行循环,在循环中我们将f变量和4相除最后把值在赋值给f变量,在判断f变量和8相余是否等于7,如果是则直接返回4,则下来在声明一个a变量,默认值为0,然后再进行循环,当前的变量a和变量a相乘是否小于形参n,如果是则进入循环,在循环中我们使用Math.floor方法向下取整通过( n - a*a ) ** 0.5该公式得出的值,然后进行判断 b*b + a*a === n,如果满足则直接返回2,如果不是则将变量a自增1,循环结束后,如果没有返回值则直接返回3

var numSquares = function(n) {
    let s = Math.floor(n ** 0.5);
    if( s*s === n ) return 1;
    let f = n
    if(f % 8 === 7) return 4;
    while( f % 4 === 0 ){
        f /= 4
        if(f % 8 === 7) return 4;
    }
    let a = 0
    while( a*a < n ){
        b = Math.floor(( n - a*a ) ** 0.5)
        if( b*b + a*a === n ) return 2
        a++
    }
    return 3
};


相关文章
|
12天前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
13天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
16 1
|
13天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
17 0
|
13天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
14 0
|
12天前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
|
13天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
14 1
|
13天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
7 1
|
13天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
14 1
|
13天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
1天前
|
机器学习/深度学习 算法 网络架构
基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真
摘要:该内容展示了一个基于YOLOv2的单人口罩佩戴检测和人脸定位算法的应用。使用MATLAB2022A,YOLOv2通过Darknet-19网络和锚框技术检测图像中的口罩佩戴情况。核心代码段展示了如何处理图像,检测人脸并标注口罩区域。程序会实时显示检测结果,等待一段时间以优化显示流畅性。