当前位置: 首页 > article >正文

豆包MarsCode算法题:完美整数

问题描述

在这里插入图片描述


思路分析

问题拆解

  1. 遍历区间 [x, y]:

    • 我们需要逐一检查 [x, y] 区间中的每个整数。
  2. 判断某个整数是否为完美整数:

    • 方法1:将整数转为字符串,检查字符串中所有字符是否相同。
    • 方法2:通过数学方式,提取每一位数字,判断是否相同。
  3. 计数:

    • 如果当前数字是完美整数,则将计数器 count 加 1。

解题方法(在这里我用的是字符串方法)

  • 方法1:字符串方法

    • 将数字转为字符串,通过遍历字符判断是否所有字符相同。
    • 示例:
      • 数字 111 -> 字符串 “111” -> 每位字符相同,判定为完美整数。
      • 数字 123 -> 字符串 “123” -> 字符不同,判定为非完美整数。
  • 方法2:数学方法

    • 提取数字的每一位,通过除法和取余操作判断所有位是否相同。
    • 示例:
      • 数字 111:
        • 提取最低位:111 % 10 = 1
        • 依次除以 10 检查其余位:(111 / 10) % 10 = 1,结果一致。
      • 数字 123:
        • 提取最低位:123 % 10 = 3
        • 继续检查 (123 / 10) % 10 = 2,结果不一致。

参考代码(Java)

public class Main {
    public static int solution(int x, int y) {
        int count = 0;
        for (int i = x; i <= y; i++) {
            if (isPerfectNumber(i)) {
                count++;
            }
        }
        return count;
    }

    // 判断一个整数是否是完美整数
    private static boolean isPerfectNumber(int num) {
        String str = Integer.toString(num);
        char firstChar = str.charAt(0);
        for (int i = 1; i < str.length(); i++) {
            if (str.charAt(i) != firstChar) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        // 测试用例
        System.out.println(solution(1, 10) == 9); // 输出 true
        System.out.println(solution(2, 22) == 10); // 输出 true
    }
}

代码分析

  1. solution 方法
 public static int solution(int x, int y) {
        int count = 0;
        for (int i = x; i <= y; i++) {
            if (isPerfectNumber(i)) {
                count++;
            }
        }
        return count;
    }
  • 功能:计算给定区间 [x, y] 中的完美整数数量。
  • 输入参数:两个整数 xy,表示区间的起点和终点。
  • 实现逻辑
    1. 遍历区间内的每个整数 i
    2. 调用辅助方法 isPerfectNumber 判断 i 是否为完美整数。
    3. 若是完美整数,计数器 count 加 1。
  • 输出:返回区间内完美整数的总数。
  1. isPerfectNumber 方法
 // 判断一个整数是否是完美整数
    private static boolean isPerfectNumber(int num) {
        String str = Integer.toString(num);
        char firstChar = str.charAt(0);
        for (int i = 1; i < str.length(); i++) {
            if (str.charAt(i) != firstChar) {
                return false;
            }
        }
        return true;
    }
  • 功能:判断某个整数是否是完美整数。
  • 输入参数:一个整数 num
  • 实现逻辑
    1. 将整数 num 转换为字符串形式 str
    2. 获取字符串的第一个字符 firstChar
    3. 遍历字符串的其余部分,逐位检查每个字符是否都等于 firstChar
    4. 如果发现有不相同的字符,则返回 false
    5. 如果所有字符都相同,则返回 true
  • 输出:返回布尔值,true 表示是完美整数,false 表示不是。

关键逻辑

  1. 判断是否是完美整数:

    • String str = Integer.toString(num);
      • 将数字转换为字符串形式,方便逐字符判断。
    • char firstChar = str.charAt(0);
      • 获取字符串的第一个字符,用作参考值。
    • if (str.charAt(i) != firstChar)
      • 遍历字符串的其余部分,逐位比较每个字符是否相同。
  2. 遍历区间:

    • for (int i = x; i <= y; i++)
      • 从区间的起点 x 遍历到终点 y,确保所有整数都被检查。
    • if (isPerfectNumber(i))
      • 每次判断当前数字 i 是否是完美整数。
  3. 计数和返回:

    • count++:如果是完美整数,则计数器增加 1。
    • return count;:遍历结束后,返回计数器的值。

http://www.kler.cn/a/401334.html

相关文章:

  • HCIP --OSI七层参考模型回顾、TCP/UDP协议复习
  • Linux网络——套接字编程
  • SpringCloud处理Websocket消息过长自动断开连接
  • SRP 实现 Cook-Torrance BRDF
  • Qt的一个基本用户登录界面编写|| 从0搭建QT的信号与槽的应用案例 ||Qt样式表的应用
  • 道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会
  • Spring Boot图书馆管理系统:疫情下的解决方案
  • Preamble puncture 信号处理技术
  • 24.11.19 web框架
  • 百度世界2024:智能体引领AI应用新纪元
  • ALS 推荐算法案例演示(python)
  • Axure PR 9 穿梭框 设计交互
  • https(day30)
  • 疫情中的图书馆管理:Spring Boot系统设计
  • 乘最多水的容器python
  • CSS:高级寄巧
  • 算法--动态规划--环形数组的最大贡献值
  • 邻接多重表、十字链表、边集数组
  • 浅谈电力行业网络安全与防护
  • centos7 安装gitlab
  • 深入理解 Vue 3 的 onLoad 和 onReady 生命周期及相关知识点
  • GNU与开源:塑造数字世界的自由基石
  • 【C++】多态:C++编程的魔法师(1)
  • tdengine学习笔记-整体架构及docker安装
  • ([LeetCode仓颉解题报告] 661. 图片平滑器
  • 深入探索Python数据可视化:自定义颜色映射、标签与进阶技巧