You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算我的快乐数(Happy Number)函数的Big O时间复杂度?

LeetCode 202题「快乐数」代码的时间复杂度分析

我知道这并非LeetCode第202题「快乐数」的最优实现,但我想要分析这段带有条件while循环的代码的时间复杂度Big O。另外,当n的初始值为0-4时,时间复杂度为O(1)。

/**
 * @param {number} n
 * @return {boolean}
 */

var isHappy = function(n) {
    /* pseudocode
    - n is input
    - while loop if num is greater than 1
    - turn number to string 
    - split the string
    - map to an array
    - add all numbers' squares
    - if num is 1, break and return true
    - if not loop 
    */
    
    // check for definite false cases
    if (n === 1) {
            return true;
        }
    else if (n === 0|| n === 2 || n === 3 || n === 4) {
        return false;
        }
    
    while (n > 1) {
        // split and turn to string
        n = n.toString().split("");
        console.log(n);
        
        // map to arr
        //let tempArr = n.map(n);
        console.log("n: " + n);
        
        // add all nums squares
        let tempNum = 0;
        n.forEach(e => {
            tempNum += (e**2);
            console.log("adding ", e**2);
        });
        
        // change n to sum and reset tempNum
        n = tempNum;
        tempNum = 0;
        
        // check conditions for true/false
        if (n === 1) {
            return true;
        }
        else if (n === 0|| n === 2 || n === 3 || n === 4) {
        return false;
        }
    }
};

时间复杂度分析

核心前提:快乐数的迭代收敛特性

不管初始输入的n有多大,经过有限次迭代后,结果只会出现两种情况:

  • 收敛到1(快乐数,直接返回true)
  • 进入固定循环:4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4(非快乐数,遇到4直接返回false)

这意味着while循环的迭代次数是固定常数,不会随n的大小无限增长(实际测试中,最大迭代次数不超过20次,属于常数范畴)。

单次迭代的时间开销

每次while循环里的核心操作:

  • 将n转为字符串并拆分:操作的时间取决于n的位数,而一个数n的位数是O(log₁₀n)(等价于O(log n),对数底数不影响大O复杂度)。
  • 遍历拆分后的数组计算平方和:同样需要遍历每一位数字,时间开销也是O(log n)。

因此单次迭代的时间复杂度是O(log n)。

整体时间复杂度

由于迭代次数是常数,常数次的O(log n)操作叠加后,整体时间复杂度仍为O(log n)。

特殊情况

当n的初始值为0-4时,代码直接通过条件判断返回结果,无需进入循环,此时时间复杂度为O(1)。

内容的提问来源于stack exchange,提问作者Sfzmango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:20:31