1017. 相似的RGB颜色

1017. 相似的RGB颜色

 
在本题中,每个大写字母代表从“0”到“f”的一些十六进制数字。
红绿蓝三元色#AABBCC可以简写为#ABC。 例如,#15c是颜色#1155cc的简写。
现在,假设两种颜色#ABCDEF#UVWXYZ之间的相似性是-(AB - UV) ^ 2 - (CD - WX) ^ 2 - (EF - YZ) ^ 2
给定颜色#ABCDEF,返回与#ABCDEF最相似且含有一个简写的7字符颜色(也就是说,它可以用类似#XYZ的形式表示)。

样例

样例1:
输入: color = "#09f166"
输出: "#11ee66"
解释:
二者相似程度为 -(0x09 - 0x11)^2 -(0xf1 - 0xee)^2 - (0x66 - 0x66)^2 = -64 -9 -0 = -73.
这是所有能够简写的颜色里最接近的颜色。
样例2:
输入: color = "#010000"
输出: "#000000"
解释:
二者相似程度为 -(0x01 - 0x00)^2 -(0x00 - 0x00)^2 - (0x00 - 0x00)^2 = -1 -0 -0 = -1.
这是所有能够简写的颜色里最接近的颜色。

注意事项

  • color 是一个长度为7的字符串。
  • color 是一个合法的RGB颜色: 对于每一个 i > 0color[i] 是一个 0 到 f的十六进制数字。
  • 任何一个有最高相似度的答案都是正确的。
  • 所有的输入输出都是小写字母,输出应为7个字符的字符串。
 
public class Solution {
    /**
     * @param color: the given color
     * @return: a 7 character color that is most similar to the given color
     */
    public String similarRGB(String color) {
        // Write your code here
       String result = "#";
            result = result + rgb(color.substring(1, 3))
                    + rgb(color.substring(3, 5))
                    + rgb(color.substring(5, 7));
            return result;
        }
 
 
        private String rgb(String substring) {
            if (substring == null) return "";
            int sum = Integer.parseInt(substring, 16);
            if (sum < 0x11) {
                if (sum > 8)
                    return "11";
                else return "00";
            } else if (sum < 0x22) {
                if (sum > (0x22 - 9))
                    return "22";
                else return "11";
            } else if (sum < 0x33) {
                if (sum > (0x33 - 9))
                    return "33";
                else return "22";
            } else if (sum < 0x44) {
                if (sum > (0x44 - 9))
                    return "44";
                else return "33";
            } else if (sum < 0x55) {
                if (sum > (0x55 - 9))
                    return "55";
                else return "44";
            } else if (sum < 0x66) {
                if (sum > (0x66 - 9))
                    return "66";
                else return "55";
            } else if (sum < 0x77) {
                if (sum > (0x77 - 9))
                    return "77";
                else return "66";
            } else if (sum < 0x88) {
                if (sum > (0x88 - 9))
                    return "88";
                else return "77";
            } else if (sum < 0x99) {
                if (sum > (0x99 - 9))
                    return "99";
                else return "88";
            } else if (sum < 0xaa) {
                if (sum > (0xaa - 9))
                    return "aa";
                else return "99";
            } else if (sum < 0xbb) {
                if (sum > (0xbb - 9))
                    return "bb";
                else return "aa";
            } else if (sum < 0xcc) {
                if (sum > (0xcc - 9))
                    return "cc";
                else return "bb";
            } else if (sum < 0xdd) {
                if (sum > (0xdd - 9))
                    return "dd";
                else return "cc";
            } else if (sum < 0xee) {
                if (sum > (0xee - 9))
                    return "ee";
                else return "dd";
            } else {
                if (sum > (0xFF - 9))
                    return "ff";
                else return "ee";
            }
        }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值