800. Similar RGB Color
Approach 1: Check nearest neighbours two characters at a time
class Solution(object):
def similarRGB(self, color):
"""
:type color: str
:rtype: str
"""
ret = '#'
def subtract(s1, s2):
return abs(int(s1, 16)-int(s2, 16))
di = {'0':['00','11'], '1':['00','11','22'], '2':['11','22','33'],'3':['22', '44', '33'], '4':['33', '44', '55'], '5':['44', '55', '66'], '6':['55','66','77'], '7':['66','77','88'], '8':['77','88', '99'], '9':['88','99','aa'], 'a':['99','aa','bb'], 'b':['aa','bb','cc'], 'c':['bb','cc','dd'], 'd':['cc','dd','ee'], 'e':['dd','ee','ff'],'f':['ee','ff']}
for i in range(1,len(color),2):
# print(color[i:i+2])
mi = float('inf')
part = ''
for j in di[color[i]]:
su = subtract(color[i:i+2],j)
if su < mi:
part = j
mi = su
# print(j, su, mi, part)
ret += part
return retApproach 2: Use more advanced math
Last updated