lintcode 1017 · 相似的RGB颜色【进制计算】
题目链接,题目描述
https://www.lintcode.com/problem/1017
在本题中,每个大写字母代表从“0”到“f”的一些十六进制数字。红绿蓝三元色#AABBCC可以简写为#ABC。 例如,#15c是颜色#1155cc的简写。现在,定义两种颜色#ABCDEF和#UVWXYZ之间的相似度是abs((AB - UV)^2 + (CD - WX)^2 + (EF - YZ)^2)。给定颜色#ABCDEF,返回与#ABCDEF最相似(即相似度最小)且可以简写表示的7字符颜色(也就是说,它可以用类似#XYZ的形式表示)。color 是一个长度为7的字符串。
color 是一个合法的RGB颜色: 对于每一个 i > 0, color[i] 是一个 0 到 f的十六进制数字。
任何一个有最高相似度的答案都是正确的。
所有的输入输出都是小写字母,输出应为7个字符的字符串。
样例
样例 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.
这是所有能够简写的颜色里最接近的颜色。
思路,以及疑惑的地方
题目描述中给的公式是每2位平方相加。给的例子确是相减。看了其他题解,才知道是是相加。 其他题解全是用的工具类库,比如 int q = Integer.parseInt(comp, 16); return String.format("%02x", 17 * q); 其实这样不太好,知其然不知其所以然。底层进制计算,新手估计很难写出来。我的答案没用到工具类库,而是自己写的16进制转10进制,10进制转16进制的方法,对于别的语言完全适用
解题关键点:
第一步:理解题目意思:关键是,请看代码 int closest1 = int1 / 17 + (int1 % 17 > 8 ? 1 : 0); //最接近的
第二步: 参考其他题解。我没有用工具类库,自己从0开始写了16进制转10进制,10进制转16进制的方法
我的答案,其他用工具类库的答案自己去看题解
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) {/*方法:独立性 + 枚举我们可以发现,颜色中的每一维都是独立的,因此我们只需要分别计算出 color = #ABCDEF中与 AB,CD 和 EF 相似度最大的颜色即可。最终的答案为这三个颜色的结合。对于 AB,我们要在 00 到 ff 中找到一个相似度最大的。在方法一中我们得知,00 到 ff 均为 17 的倍数,因此我们需要找到一个 17 的倍数,使得其与 AB 的差的绝对值最小。显然,当 AB mod 17 > 8 时,取刚好比 AB 大的那个数;当 AB mod 17 <= 8 时,取刚好比 AB 小或与 AB 相等的那个数。*/Map<Integer, Character> mapi = new HashMap<>();mapi.put(10, 'a');mapi.put(11, 'b');mapi.put(12, 'c');mapi.put(13, 'd');mapi.put(14, 'e');mapi.put(15, 'f');Map<Character, Integer> mapc = new HashMap<>();for (int k : mapi.keySet()) {mapc.put(mapi.get(k), k);}String s1 = color.substring(1, 3);String s2 = color.substring(3, 5);String s3 = color.substring(5, 7);int int1 = to10hex(s1, mapi, mapc);int int2 = to10hex(s2, mapi, mapc);int int3 = to10hex(s3, mapi, mapc);//System.out.println(s1 + " " + s2 + " " + s3);//System.out.println(int1 + " " + int2 + " " + int3);int closest1 = int1 / 17 + (int1 % 17 > 8 ? 1 : 0); //最接近的int closest2 = int2 / 17 + (int2 % 17 > 8 ? 1 : 0); //最接近的int closest3 = int3 / 17 + (int3 % 17 > 8 ? 1 : 0); //最接近的//System.out.println("最接近的:"+closest1+" "+ closest2+" "+closest3);String ans = "#";ans += h10to16(closest1, mapi, mapc);ans += h10to16(closest2, mapi, mapc);ans += h10to16(closest3, mapi, mapc);return ans;}//16进制转十进制public static int to10hex(String s, Map<Integer, Character> mapi, Map<Character, Integer> mapc) {int ans = 0;char[] chars = s.toCharArray();int n = chars.length;int pow = 0;for (int i = n - 1; i >= 0; i--) {char c = chars[i];if (mapc.containsKey(c)) { // 10-15int num = Integer.parseInt(mapc.get(c) + "");ans += num * (int) (Math.pow(16, pow));} else {int num = Integer.parseInt(c + "");ans += num * (int) (Math.pow(16, pow));}pow++;}return ans;}//10进制转16进制public static String h10to16(int n, Map<Integer, Character> mapi, Map<Character, Integer> mapc) {n*=17;List<Integer> list = new ArrayList<>(); //先列出n的二进制表示boolean start = false;for (int i = 31; i >= 0; i--) {int a = (n & (1 << i)) == 0 ? 0 : 1;if(a==1 && !start){start =true;}if(start) list.add(a);}//System.out.println(n+" "+ list);//正对二进制表示,每4个一组,计算16进制int len = list.size();int cnt = 0;int sum=0;List<String> ll = new ArrayList<>();for (int i = len-1; i >=0 ; i--) {sum += (int)(Math.pow(2,cnt++))*list.get(i);if(cnt==4){if(sum <10) ll.add(sum+"");else ll.add(mapi.get(sum)+"");sum=0;cnt =0;}}if(sum >0){if(sum <10) ll.add(sum+"");else ll.add(mapi.get(sum)+"");}Collections.reverse(ll);String ans = "";for (String s : ll) {ans+=s;}//System.out.println(ans);return ans.length()==0?"00": ans;}}
相关文章:
lintcode 1017 · 相似的RGB颜色【进制计算】
题目链接,题目描述 https://www.lintcode.com/problem/1017 在本题中,每个大写字母代表从“0”到“f”的一些十六进制数字。红绿蓝三元色#AABBCC可以简写为#ABC。 例如,#15c是颜色#1155cc的简写。现在,定义两种颜色#ABCDEF和#UV…...
全国首台!浙江机器人产业集团发布垂起固定翼无人机-机器人自动换电机巢
展示突破性创新技术,共话行业发展趋势。8月25日,全国首台垂起固定翼无人机-机器人自动换电机巢新品发布会暨“科创中国宁波”无人机产业趋势分享会在余姚市机器人小镇成功举行。 本次活动在宁波市科学技术协会、余姚市科学技术协会指导下,由浙…...
采用 UML 对软件系统进行建模的基本框架
UML 包括一些可以相互组合为图标的图形元素, 通过提供不同形式的图形来 表述从软件分析开始的软件开发全过程的描述,一个图就是系统架构在某个侧面的 表示,所有的图组成了系统的完整视图。UML 主要提供了以下五类图: ÿ…...
编译tiny4412 Linux 内核
工作环境 Ubuntu 22 交叉编译器 4.5.1 解压Linux内核源码,进入目录 将官方配置完好的defconfig文件作为配置文件 cp tiny4412_linux_defconfig .config由于内核版本较低,需要下载低版本的gcc,选择下载gcc-9与g9 sudo apt install gcc-9 g-…...
Ubuntu22.04安装中文输入法►由踩坑到上岸版◄
Ubuntu22.04安装中文输入法►由踩坑到上岸版◄ 了解入坑上岸 更新一发:Gedit中文乱码问题的解决 为了方便回忆和记录甚至后面继续重装系统,我还是写一下以便将来用到或参考~ 了解 安装Ubuntu22.04(截至2023年08月26日11ÿ…...
SpringBoot简单上手
spring boot 是spring快速开发脚手架,通过约定大于配置,优化了混乱的依赖管理,和复杂的配置,让我们用java-jar方式,运行启动java web项目 入门案例 创建工程 先创建一个空的工程 创建一个名为demo_project的项目,并且…...
git及GitHub的使用
文章目录 git在本地仓库的使用github使用创建仓库https协议连接(不推荐,现在用起来比较麻烦)ssh连接(推荐)git分支操作冲突处理忽略文件 git在本地仓库的使用 1.在目标目录下右键打开git bash here 2.创建用户名和邮箱(注: 下载完…...
【考研数学】线性代数第四章 —— 线性方程组(1,基本概念 | 基本定理 | 解的结构)
文章目录 引言一、线性方程组的基本概念与表达形式二、线性方程组解的基本定理三、线性方程组解的结构写在最后 引言 继向量的学习后,一鼓作气,把线性方程组也解决了去。O.O 一、线性方程组的基本概念与表达形式 方程组 称为 n n n 元齐次线性方程组…...
使用Python写入数据到Excel:实战指南
在数据科学领域,Excel是一种广泛使用的电子表格工具,可以方便地进行数据管理和分析。然而,当数据规模较大或需要自动化处理时,手动操作Excel可能会变得繁琐。此时,使用Python编写程序将数据写入Excel文件是一个高效且便…...
接口测试总结分享(http与rpc)
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 一、了解一下HTTP与RPC 1. HTTP(H…...
数据结构(Java实现)LinkedList与链表(下)
** ** 结论 让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。 LinkedList的模拟实现 单个节点的实现 尾插 运行结果如下: 也…...
linux查看正在运行的nginx在哪个文件夹当中
1、查出Nginx进程PID ps -ef|grep nginx2、查看Nginx进程启动时的工作目录 ls -la /proc/<PID>/cwd将<PID>替换为第一步中列出的Nginx进程的PID。该命令会显示Nginx进程在启动时所在的工作目录(当前工作目录)...
Vue实现Excel表格中按钮增加小数位数,减少小数位数功能,多用于处理金融数据
效果图 <template><div><el-button click"increaseDecimals">A按钮</el-button><el-button click"roundNumber">B按钮</el-button><el-table :data"tableData" border><el-table-column v-for&q…...
自然语言处理(一):词嵌入
词嵌入 词嵌入(Word Embedding)是自然语言处理(NLP)中的一种技术,用于将文本中的单词映射到一个低维向量空间中。它是将文本中的单词表示为实数值向量的一种方式。 在传统的文本处理中,通常使用独热编码&…...
【HSPCIE仿真】HSPICE仿真基础
HSPICE概述 1. HSPICE简介3. 标准输入文件4. 标准输出文件3. HSPCIE仿真过程 1. HSPICE简介 SPICE (Simulation Program with IC Emphasis)是1972 年美国加利福尼亚大学柏克莱分校电机工程和计算机科学系开发 的用于集成电路性能分析的电路模拟程序。 …...
二、前端监控之方案调研
前端监控体系 一个完整的前端监控体系包括了日志采集、日志上报、日志存储、日志切分&计算、数据分析、告警等流程。 对于一名前端开发工程师来说,也就意味着工作不再局限于前端业务的开发工作,需要有Nginx服务运维能力、实时/离线分析能力、Node应…...
npm 创建 node.js 项目
package.json重要说明 package.json是创建任何node.js项目必须要有的一个文件。 因为在package.json文件中,有详细的项目描述, 包括: (1)项目名称:name (2)版本:version (3)依赖文件:dependencies 等…...
JMeter性能测试(上)
一、基础简介 界面 打开方式 双击 jmeter.bat双击 ApacheJMeter.jsr命令行输入 java -jar ApacheJMeter.jar 目录 BIN 目录:存放可执行文件和配置文件 docs目录:api文档,用于开发扩展组件 printable-docs目录:用户帮助手册 li…...
自定义date工具类 DateUtils.java
自定义date工具类 DateUtils.java 简介 Date日期类型的工具类。 api 日期格式化 format(Date date);日期格式化 format(Date date, String pattern);计算距离现在多久,非精确 getTimeBefore(Date date);计算距离现在多久,精确…...
Linux(Ubuntu)安装docker
2017年的3月1号之后,Docker 的版本命名开始发生变化,同时将 CE 版本和 EE 版本进行分开。 Docker社区版(CE):为了开发人员或小团队创建基于容器的应用,与团队成员分享和自动化的开发管道。docker-ce 提供了简单的安装…...
Apache Poi 实现Excel多级联动下拉框
由于最近做的功能,需要将接口返回的数据列表,输出到excel中,以供后续导入,且网上现有的封装,使用起来都较为麻烦,故参考已有做法封装了工具类。 使用apache poi实现excel联动下拉框思路 创建隐藏单元格&a…...
常见的 HTML<meta> 标签的 name 属性及其作用
HTML中的 <meta> 标签可以通过 name 属性提供元数据,这些元数据可以用于指定有关文档的信息,以及控制浏览器和搜索引擎的行为。name 属性通常与其他属性一起使用,如 content、charset、http-equiv 等,以提供更具体的元数据信…...
【网络安全】理解报文加密、数字签名能解决的实际问题
文章目录 前言1. 防止报文泄露 —— 加密体系的出现1.1 理解非对称加密体系的实施难点1.2 加密体系的实际应用 2. 防止报文被篡改 —— 数字签名的出现2.1 数字签名的原理2.2 数字签名的实施难点2.2 数字签名的实际应用 —— 引入摘要算法 3. 实体鉴别 —— CA证书 后记 前言 …...
linux中安装nodejs,卸载nodejs,更新nodejs
卸载nodejs 卸载node sudo apt-get remove nodejs清理掉自动安装的并且不需要软件包 sudo apt autoremove查看node相关的文件 sudo whereis node如果有文件需要手动删除文件 删除该文件命令 sudo rm -rf /usr/local/bin/node在此查看node -v 是未找到,说明你已经…...
浅谈Python网络爬虫应对反爬虫的技术对抗
在当今信息时代,数据是非常宝贵的资源。而作为一名专业的 Python 网络爬虫程序猿,在进行网页数据采集时经常会遭遇到各种针对爬虫行为的阻碍和限制,这就需要我们掌握一些应对反爬机制的技术手段。本文将从不同层面介绍如何使用 Python 进行网…...
代理池在过程中一直运行
Hey,爬虫达人们!在爬虫的过程中,要保持代理池的稳定性可不容易。今天就来和大家分享一些实用经验,教你如何让代理池在爬虫过程中一直运行!方法简单易行,让你的爬虫工作更顺畅. 在进行爬虫工作时࿰…...
基于Java+SpringBoot+Vue前后端分离党员教育和管理系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
【flutter直接上传图片到阿里云OSS】
flutter直接上传文件到阿里云需要获取凭证,通过调用阿里云获取凭证的接口能拿到下面这些参数 {"StatusCode": 200,"AccessKeyId": "STS.NSsrKZes4cqm.....","AccessKeySecret": "7eGnLZaEFsRCGYJAnrtdE9n....."…...
【MySQL系列】表的内连接和外连接学习
「前言」文章内容大致是对MySQL表的内连接和外连接。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、内连接二、外连接2.1 左外连接2.2 右外连接 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,前面篇章学习的…...
C语言日常刷题 3
文章目录 题目答案与解析1234、5、6、 题目 1.已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d; ,正确的调用语句是( ) A: fun(c,&d); B: fun(c,d); C: fun(&c,&d…...
自主网站/北京网站建设公司哪家好
前言:仅个人小记。 正文 由于 rapidjson是 “header-only”的C库,故而直接将头文件目录拷贝到系统目录或者指定目录即可完成安装。 参考材料: rapidjson代码仓库 https://github.com/Tencent/rapidjson rapidjson 文档 https://rapidjson.…...
阿里云 win wordpress 伪静态/吉林seo刷关键词排名优化
1. Proxy 的优势如下: 1. Proxy 可以直接监听对象而非属性; 2. Proxy 可以直接监听数组的变化; 3. Proxy 有多达 13 种拦截方法,不限于 apply、ownKeys、deleteProperty、 has 等等是 Object.defineProperty 不具备的; 4. Proxy 返回的是一个…...
便利的微网站建设/网络舆情的网站
<i><a href"login.html" style"color:white;font-size: 13px;" target"_top">退出</a></i> 加上 target"_top"就可以正常跳出了转载于:https://www.cnblogs.com/jyf0207/p/6780500.html...
怎么做网站导航条/电商网站卷烟订货流程
题目描述 请设计一个高效算法,再给定的字符串数组中,找到包含”Coder”的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照”Coder”出现的次数递减排列,若两个串中”Coder”出现的次数相同,则…...
asp网站后台管理系统下载/流量平台
公告:本来不打算再多说话,但看了一些人的观点,还是忍不住再说点什么。个人修养不到家,明知直言犯忌,还是直言,请看:《教师判分如何“高抬贵手”?》********************************…...
互联网建设网站/品牌营销活动策划方案
一、Redis主从复制主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性1. 主从复制的相关操作a,配置主从复制方式一、新增redis6380.conf, 加入 slaveof 192.168.152.128 6379, 在6379启动完后再启638…...