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

LeetCode 3304题C#解法的时间与空间复杂度分析问询

LeetCode 3304. Find the K-th Character in String Game I 解法复杂度分析

题目规则

初始字符串word为"a",给定正整数k,每次操作将word中每个字符转为字母表下一个字符('z'转为'a'),生成新字符串并追加到原word后,重复操作直到word长度≥k,返回第k个字符。

C# 解法代码

public char KthCharacter(int k) {
    string word = "a";
    int min = 97, max = 122;
    int letter = 0;

    int i = 0;

    while (word.Length < k)
    {
        string tempStr = "";
   
        while (i < word.Length)
        {
            letter = word[i++];
            letter++;
            if (letter > max) letter = min;
            char temp = Convert.ToChar(letter);
            tempStr +=  new string(new char[] {temp});
        }
        
        word += tempStr;
        i=0;
    }

    return word[k-1];
}

问题

该解法的时间复杂度(大O表示)是多少?我认为外层循环为O(logk),因为word长度每次翻倍直至≥k;内层循环遍历当前word,长度逐次翻倍,为O(k),总时间复杂度是否为O(k logk)?空间复杂度是否为O(k)?

复杂度分析

  • 时间复杂度:确实是O(k logk)。外层循环次数为log₂k级别(因为每次word长度翻倍,从1增长到≥k需要约log₂k次循环)。每次外层循环中,内层循环要遍历当前word的所有字符:第一次遍历1个字符,第二次2个,第三次4个……直到总长度接近k。把这些遍历的字符数求和:1+2+4+…+2m(其中2m < k ≤2(m+1)),总和为2(m+1)-1,约等于2k,再乘以循环次数logk,整体时间复杂度就是O(k logk)。另外代码中tempStr的字符串拼接操作,由于C#字符串不可变,每次拼接都会生成新字符串,这部分开销也包含在O(k logk)的复杂度内。

  • 空间复杂度:是O(k)。最终word的长度是≥k的最小2的幂(若k本身是2的幂则等于k),空间占用与k呈线性关系,因此空间复杂度为O(k)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:36:15