需要一些数学思维,这一类题目,必须得从数学角度,才能理解算法的每一步目的。
1. 先从简单开始,判断一个数,是否为 平方和
367. 有效的完全平方数
暴力求解就可以得到,非常好理解,这提供的常用做法就是 for 循环,但是 i 是有限制的循环。
var isPerfectSquare = function(num) {if (num <= 1) {return true;}for (let i = 0; i * i <= num; i++) { // important!!if (i * i === num) {return true;}}return false;};
2. 判断一个数是否为质数
还是相同的 for 循环
function isPrime(num) {if (num <= 1) { // 1 和 负数 不是质数return false;}for (let i = 2; i * i <= num; i++) { // 同样的 for 循环if (num % i === 0) {return false;}}return true;}
3. 短除法做质因数分解

function getPrimeFactorOfNum(num) {let primes = [];for (let i = 2; i * i <= num; i++) {if (isPrime(i)) {if (num % i === 0) {num /= i;primes.push(i);if (isPrime(num)) {primes.push(num); // 加上最后一个商return primes; // 正确出口} else { // 不是质数while (num % i === 0) { // 还能继续整除num /= i;primes.push(i);}}}}}return [];}
