你们将如何处理?我在面试中遇到了这个问题。
示例:896bb1返回1,因为它是9006001的十六进制表示形式,它是3001的正整数。示例:1a919返回3,因为1,a9和19是完美正方形的十六进制表示形式,而3是最小数字需要拆分。
答案 0 :(得分:1)
这是Ruby中解决此问题的方法。
MAX_NUM = 999999.freeze
def get_min(hex)
return "Invalid hex" unless validate_hex?(hex)
pieces = min_breaks(hex)
return -1 if pieces == MAX_NUM
pieces
end
def min_breaks(hex, index = 0)
hex_length = hex.length
return 0 if index == hex_length
numeric = 0
result = MAX_NUM
for i in index..hex_length-1 do
numeric = numeric * 16 + hex[i].hex
result = [result, 1 + min_breaks(hex, i + 1)].min if is_square?(numeric)
end
result
end
def is_square?(x)
(Math.sqrt(x) % 1).zero?
end
def validate_hex?(hex)
hex =~ /^[0-9a-f]+$/i
end
puts "Enter hex string:"
hex = gets.chomp
puts "Output: #{get_min(hex.downcase)}"