package LeetCode_405 import java.lang.StringBuilder /** * 405. Convert a Number to Hexadecimal * https://leetcode.com/problems/convert-a-number-to-hexadecimal/description/ * https://www.youtube.com/watch?v=QJW6qnfhC70 * */ class Solution { fun toHex(num_: Int): String { if (num_ == 0) { return "0" } val map = mapOf( 0 to "0", 1 to "1", 2 to "2", 3 to "3", 4 to "4", 5 to "5", 6 to "6", 7 to "7", 8 to "8", 9 to "9", 10 to "a", 11 to "b", 12 to "c", 13 to "d", 14 to "e", 15 to "f" ) var num = num_ val sb = StringBuilder() var remainder = 0 while (num != 0) { //let positive and negative both can calculated in hexadecimal remainder = (16 + num % 16) % 16 sb.insert(0,map.get(remainder)) //ushr: 无符号右移,高位补0(都在高位插入0) //because num can be a negative. so use unsigned right shift num = num ushr 4 } return sb.toString() } }