RGB色值转换为整数值
问题描述
小M需要一个函数,用于将RGB颜色值转换为相应的十六进制整数值。RGB色值以字符串的形式给出,如"rgb(192, 192, 192)",需要转换为对应的整数值。
解题思路
我们需要实现一个函数,接受一个RGB字符串形式的输入,例如 "rgb(192, 192, 192)",并输出对应的十六进制整数值 12632256。RGB字符串中的三个值分别代表红 (R)、绿 (G)、蓝 (B) 的强度,范围均为 0~255。
RGB颜色值转换为十六进制整数值的关键在于:
-
解析输入字符串:提取出RGB三个整数值。
-
位运算合并:将三个值按照十六进制规则拼接,具体为:
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:蓝色值不需要移位,占据十六进制的最低位;- 最终通过位或操作将三部分合并为一个整数。
时间复杂度
-
字符串处理:
substring和split的复杂度为 ,其中 是字符串的长度。
-
整数转换:
- 每次调用
Integer.parseInt的复杂度为 ,其中 是单个RGB值的字符长度,最多为。
- 每次调用
-
位运算:
- 位移和按位或操作的复杂度为 。
总时间复杂度:。