【每日一题Day13】LC481神奇字符串

简介: s 的前几个元素是 s = "1221121221221121122……" 。如果将 s 中连续的若干 1 和 2 进行分组,可以得到 "1 22 11 2 1 22 1 22 11 2 11 22 ......" 。每组中 1 或者 2 的出现次数分别是 "1 2 2 1 1 2 1 2 2 1 2 2 ......" 。

神奇字符串【LC481】


神奇字符串 s 仅由 '1' 和 '2' 组成,并需要遵守下面的规则:


  • 神奇字符串 s 的神奇之处在于,串联字符串中 '1' 和 '2' 的连续出现次数可以生成该字符串。


s 的前几个元素是 s = "1221121221221121122……" 。如果将 s 中连续的若干 1 和 2 进行分组,可以得到 "1 22 11 2 1 22 1 22 11 2 11 22 ......" 。每组中 1 或者 2 的出现次数分别是 "1 2 2 1 1 2 1 2 2 1 2 2 ......" 。上面的出现次数正是 s 自身。


给你一个整数 n ,返回在神奇字符串 s 的前 n 个数字中 1 的数目。


这是什么智力题吗?参考三叶姐


  • 思路:根据规律构造神奇字符串,统计1的个数后返回


  • 规律


神奇字符串 s 称为“原串”,对 s 进行连续段划分所得的串叫“划分串”,对划分串进行计数的串叫“计数串”。

。划分串的长度只能是1或者2


。计数串总是短于原串,因此使用变量i记录当前构造到原串的位置,使用变量j来记录计数串对应的位置


。可以分四种情况构造神奇字符串


1.当原串当前字符为1,计数串当前字符为1


那么原串只能添加字符’2’,原串指针后移一位


2.当原串当前字符为1,计数串当前字符为2


那么原串只能添加字符’12’,原串指针后移两位


3.当原串当前字符为2,计数串当前字符为1


那么原串只能添加字符’1’,原串指针后移一位


4.当原串当前字符为2,计数串当前字符为2


那么原串只能添加字符’21’,原串指针后移两位


  • 代码


class Solution {
    public int magicalString(int n) {
        char[] chars = new char[100001];
        chars[0] = '0';// 哨兵
        chars[1] = '1';
        int count = 1;
        if (n < 4){
            return count;
        }
        int i = 1, j = 1;
        while (i < n){
            if (chars[i] == '1'){
                if (chars[j] == '1'){
                    chars[++i] = '2';
                }else {
                    chars[++i] = '1';
                    chars[++i] = '2';// 多构造一位不影响结果
                    count++;
                }
            }else {
                if (chars[j] == '1'){
                    chars[++i] = '1';
                    count++;
                }else {
                    chars[++i] = '2';
                    if (i + 1 <= n){// 多构造一位影响结果
                        chars[++i] = '1';
                        count++;
                    }                    
                }
            }
            j++;
        }
        return count;
    }
}


  • 复杂度


。时间复杂度:O ( n )


。空间复杂度:O ( n )

目录
相关文章
|
7月前
|
存储 人工智能 前端开发
用arkts写鸿蒙app:简单的海报生成
本文介绍了基于鸿蒙系统开发的一款个人字典与创作辅助应用,重点实现海报生成功能。通过Canvas画布组件完成图片绘制、文字填充等操作,并利用鸿蒙的沙盒机制和权限管理将生成的海报保存至本地。文中详细展示了代码实现步骤,包括渲染逻辑、数据导出及文件存储过程,同时提供了相关API文档链接以便参考。此项目不仅满足了作者个人兴趣需求,还体现了鸿蒙系统的独特特性和开发潜力。
311 4
|
15天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
7天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
10天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
931 29
|
9天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
672 52
|
3天前
|
监控 BI 数据库
打工人救星!来看看这两家企业如何用Quick BI让业务更高效
Quick BI专业版监控告警助力企业高效运作,通过灵活配置规则与多渠道推送,让数据异常早发现、快响应,推动业务敏捷决策与持续增长。
打工人救星!来看看这两家企业如何用Quick BI让业务更高效