返回介绍

solution / 0800-0899 / 0800.Similar RGB Color / README

发布于 2024-06-17 01:03:34 字数 2585 浏览 0 评论 0 收藏 0

800. 相似 RGB 颜色

English Version

题目描述

RGB 颜色 "#AABBCC" 可以简写成 "#ABC"

  • 例如,"#15c" 其实是 "#1155cc" 的简写。

现在,假如我们分别定义两个颜色 "#ABCDEF" 和 "#UVWXYZ",则他们的相似度可以通过这个表达式 -(AB - UV)^2 - (CD - WX)^2 - (EF - YZ)^2 来计算。

那么给你一个按 "#ABCDEF" 形式定义的字符串 color 表示 RGB 颜色,请你以字符串形式,返回一个与它相似度最大且可以简写的颜色。(比如,可以表示成类似 "#XYZ" 的形式)

任何 具有相同的(最大)相似度的答案都会被视为正确答案。

 

示例 1:

输入:color = "#09f166"
输出:"#11ee66"
解释: 
因为相似度计算得出 -(0x09 - 0x11)^2 -(0xf1 - 0xee)^2 - (0x66 - 0x66)^2 = -64 -9 -0 = -73
这已经是所有可以简写的颜色中最相似的了

示例 2:

输入:color = "#4e3fe1"
输出:"#5544dd"

 

提示:

  • color.length == 7
  • color[0] == '#'
  • 对于任何 i > 0color[i] 都是一个在范围 ['0', 'f'] 内的 16 进制数

解法

方法一

class Solution:
  def similarRGB(self, color: str) -> str:
    def f(x):
      y, z = divmod(int(x, 16), 17)
      if z > 8:
        y += 1
      return '{:02x}'.format(17 * y)

    a, b, c = color[1:3], color[3:5], color[5:7]
    return f'#{f(a)}{f(b)}{f(c)}'
class Solution {
  public String similarRGB(String color) {
    String a = color.substring(1, 3), b = color.substring(3, 5), c = color.substring(5, 7);
    return "#" + f(a) + f(b) + f(c);
  }

  private String f(String x) {
    int q = Integer.parseInt(x, 16);
    q = q / 17 + (q % 17 > 8 ? 1 : 0);
    return String.format("%02x", 17 * q);
  }
}
func similarRGB(color string) string {
  f := func(x string) string {
    q, _ := strconv.ParseInt(x, 16, 64)
    if q%17 > 8 {
      q = q/17 + 1
    } else {
      q = q / 17
    }
    return fmt.Sprintf("%02x", 17*q)

  }
  a, b, c := color[1:3], color[3:5], color[5:7]
  return "#" + f(a) + f(b) + f(c)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文