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

35 阅读2分钟

RGB色值转换为整数值

问题描述

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

解题思路

我们需要实现一个函数,接受一个RGB字符串形式的输入,例如 "rgb(192, 192, 192)",并输出对应的十六进制整数值 12632256。RGB字符串中的三个值分别代表红 (R)、绿 (G)、蓝 (B) 的强度,范围均为 0~255。 RGB颜色值转换为十六进制整数值的关键在于:

  1. 解析输入字符串:提取出RGB三个整数值。

  2. 位运算合并:将三个值按照十六进制规则拼接,具体为:

    • R 值左移16位;
    • G 值左移8位;
    • B 值不需要移位;
    • 最终通过位或操作合并三部分。

公式如下:

HexValue=(R<<16)(G<<8)BHexValue=(R<<16)∣(G<<8)∣B

代码:

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]);
        // 将 R、G、B 转换为十六进制整数值
        int hexValue = (r << 16) | (g << 8) | b;
        return hexValue;
    }

    public static void main(String[] args) {
        // 测试样例
        System.out.println(solution("rgb(192, 192, 192)") == 12632256);
        System.out.println(solution("rgb(100, 0, 252)") == 6553852);
        System.out.println(solution("rgb(33, 44, 55)") == 2174007);
        System.out.println(solution("rgb(255, 255, 255)") == 16777215);
        System.out.println(solution("rgb(0, 0, 0)") == 0);
    }
}

代码解析:

1. 字符串处理

String[] parts = rgb.substring(4, rgb.length() - 1).split(", ");
  • substring(4, rgb.length() - 1):去掉前缀 "rgb(" 和后缀 ")"
  • split(", "):通过逗号分隔得到RGB的三个值。

2. RGB值解析

int r = Integer.parseInt(parts[0]);
int g = Integer.parseInt(parts[1]);
int b = Integer.parseInt(parts[2]);
  • 将分割后的字符串转换为整数值。

3. 十六进制转换

int hexValue = (r << 16) | (g << 8) | b;
  • r << 16:红色值左移16位,占据十六进制的最高位;
  • g << 8:绿色值左移8位,占据十六进制的中间位;
  • b:蓝色值不需要移位,占据十六进制的最低位;
  • 最终通过位或操作将三部分合并为一个整数。

时间复杂度

  1. 字符串处理

    • substringsplit 的复杂度为 O(n)O(n),其中 nn 是字符串的长度。
  2. 整数转换

    • 每次调用 Integer.parseInt 的复杂度为 O(k)O(k),其中 kk 是单个RGB值的字符长度,最多为33
  3. 位运算

    • 位移和按位或操作的复杂度为 O(1)O(1)

总时间复杂度O(n)O(n)