RGB色值转换为整数值| 豆包MarsCode AI 刷题

229 阅读5分钟

题目解析: RGB色值转换为整数值

小M需要一个函数,用于将RGB颜色值转换为相应的十六进制整数值。RGB色值以字符串的形式给出,如"rgb(192, 192, 192)",需要转换为对应的整数值。

测试样例

样例1:

输入:rgb = "rgb(192, 192, 192)"
输出:12632256

样例2:

输入:rgb = "rgb(100, 0, 252)"
输出:6553852

样例3:

输入:rgb = "rgb(33, 44, 55)"
输出:2174007

样例4:

输入:rgb = "rgb(255, 255, 255)"
输出:16777215

样例5:

输入:rgb = "rgb(0, 0, 0)"
输出:0

题目分析

题目要求实现一个函数 solution(String rgb),将给定的RGB颜色字符串转换为对应的十六进制整数值。RGB颜色字符串的格式是 "rgb(r, g, b)",其中 rgb 分别表示红、绿、蓝三种颜色的强度(整数值范围为0-255)。

我们需要将这个RGB颜色值转换为十六进制整数值,十六进制的形式通常是以 0x 开头,表示颜色代码。具体步骤可以如下:

  • 解析字符串中的红色、绿色、蓝色三个值。
  • 将它们按照一定规则转换为单一的十六进制整数。

解析 RGB 颜色

RGB 颜色的转换规则如下:

  1. 假设我们有RGB颜色值 (r, g, b),其中 rg 和 b 都是0到255之间的整数。

  2. 将其转换为十六进制时,应该按以下规则组合:

    • r 左移16位(相当于乘以 256^2 或 65536)。
    • g 左移8位(相当于乘以 256)。
    • b 保持原值。
  3. 然后将这三个值相加,得到最终的十六进制整数。

例如,rgb(192, 192, 192) 转换为整数值时:

  • 红色 r = 192 → 十六进制为 0xC0,转换为整数是 192 * 65536 = 12582912
  • 绿色 g = 192 → 十六进制为 0xC0,转换为整数是 192 * 256 = 49152
  • 蓝色 b = 192 → 十六进制为 0xC0,转换为整数是 192
  • 合并后:12582912 + 49152 + 192 = 12632256

代码实现步骤

  1. 提取 RGB 数值: 需要从字符串 "rgb(r, g, b)" 中提取出 rgb 的数值。
  2. 转换为十六进制整数: 根据RGB的转换规则,将三种颜色的数值转换为十六进制整数。
  3. 返回结果: 返回最终的十六进制整数值。

解题步骤实现

  1. 提取 RGB 值: 给定的输入是一个字符串 "rgb(r, g, b)"。我们可以利用字符串的解析方法去提取其中的数字部分。
  2. 进行计算: 使用位操作,将RGB三种颜色合并成一个十六进制整数。
  3. 返回值: 将最终结果返回。

实现代码

javaCopy Code
public class Main {
    public static int solution(String rgb) {
        // 去除 "rgb(" 和 ")",然后根据逗号分割字符串
        String[] parts = rgb.substring(4, rgb.length() - 1).split(", ");
        
        // 解析 r, g, b 的值
        int r = Integer.parseInt(parts[0]);
        int g = Integer.parseInt(parts[1]);
        int b = Integer.parseInt(parts[2]);
        
        // 计算对应的十六进制整数值
        // RGB 到十六进制的转换公式:
        // (r << 16) | (g << 8) | b
        return (r << 16) | (g << 8) | b;
    }

    public static void main(String[] args) {
        // 你可以添加更多的测试用例
        System.out.println(solution("rgb(192, 192, 192)") == 12632256);  // 结果是 12632256
        System.out.println(solution("rgb(100, 0, 252)") == 6553852);     // 结果是 6553852
        System.out.println(solution("rgb(33, 44, 55)") == 2174007);      // 结果是 2174007
    }
}

代码解释

  1. 字符串提取

    • rgb.substring(4, rgb.length() - 1):通过 substring(4, rgb.length() - 1) 去掉了字符串开头的 "rgb(" 和结尾的 ")",剩下的是 "r, g, b" 格式的字符串。
    • split(", "):通过 split(", ") 将字符串按照 , 分割成一个包含三个元素的数组 ["r", "g", "b"]
  2. 解析整数值

    • Integer.parseInt(parts[0])Integer.parseInt(parts[1]) 和 Integer.parseInt(parts[2]) 将字符串数组中的元素转换为整数类型 rg 和 b
  3. RGB 转换为十六进制整数

    • 使用位操作将RGB三个颜色值合并为一个整数:

      • r << 16:将红色值左移16位,使其位于十六进制整数的高16位。
      • g << 8:将绿色值左移8位,位于中间8位。
      • b:蓝色值位于最低8位。
    • |(按位或操作)用于将这些值合并成一个整数。

  4. 返回结果

    • 最终返回合并后的整数。

测试

  • solution("rgb(192, 192, 192)") 应该返回 12632256,因为 rgb(192, 192, 192) 的十六进制表示是 0xC0C0C0,对应的十进制数为 12632256
  • solution("rgb(100, 0, 252)") 应该返回 6553852,对应十六进制值为 0x6400FC
  • solution("rgb(33, 44, 55)") 应该返回 2174007,对应十六进制值为 0x212837

结论

  • 本题的关键是字符串的解析和位操作的应用,能够将RGB的三个分量转换为十六进制整数值。
  • 通过按位移位和按位或操作,能够将三个颜色分量组合成一个整数,符合颜色编码的标准。

心得:

使用MarsCode AI编写代码让我体验到了编程的便利与高效。AI能够快速生成代码示例,帮助我理解不同编程概念。通过交互式的反馈,我能迅速调整思路,解决问题。同时,MarsCode AI提供的建议让我了解到更多最佳实践,提升了我的编码水平。这种工具不仅节省了时间,还激发了我的创造力,尤其是在处理复杂问题时,AI的支持显得尤为重要。总的来说,MarsCode AI是编程学习和实践中的得力助手。