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 提供了简单的安装…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
