Welcome to Subscribe On Youtube
1271. Hexspeak
Description
A decimal number can be converted to its Hexspeak representation by first converting it to an uppercase hexadecimal string, then replacing all occurrences of the digit '0'
with the letter 'O'
, and the digit '1'
with the letter 'I'
. Such a representation is valid if and only if it consists only of the letters in the set {'A', 'B', 'C', 'D', 'E', 'F', 'I', 'O'}
.
Given a string num
representing a decimal integer n
, return the Hexspeak representation of n
if it is valid, otherwise return "ERROR"
.
Example 1:
Input: num = "257" Output: "IOI" Explanation: 257 is 101 in hexadecimal.
Example 2:
Input: num = "3" Output: "ERROR"
Constraints:
1 <= num.length <= 12
num
does not contain leading zeros.- num represents an integer in the range
[1, 1012]
.
Solutions
Solution 1: Simulation
Convert the number to a hexadecimal string, then traverse the string, convert the number $0$ to the letter $O$, and the number $1$ to the letter $I$. Finally, check whether the converted string is valid.
The time complexity is $O(\log n)$, where $n$ is the size of the decimal number represented by $num$.
-
class Solution { private static final Set<Character> S = Set.of('A', 'B', 'C', 'D', 'E', 'F', 'I', 'O'); public String toHexspeak(String num) { String t = Long.toHexString(Long.valueOf(num)).toUpperCase().replace("0", "O").replace("1", "I"); for (char c : t.toCharArray()) { if (!S.contains(c)) { return "ERROR"; } } return t; } }
-
class Solution { public: string toHexspeak(string num) { stringstream ss; ss << hex << stol(num); string t = ss.str(); for (int i = 0; i < t.size(); ++i) { if (t[i] >= '2' && t[i] <= '9') return "ERROR"; if (t[i] == '0') t[i] = 'O'; else if (t[i] == '1') t[i] = 'I'; else t[i] = t[i] - 32; } return t; } };
-
class Solution: def toHexspeak(self, num: str) -> str: s = set('ABCDEFIO') t = hex(int(num))[2:].upper().replace('0', 'O').replace('1', 'I') return t if all(c in s for c in t) else 'ERROR'
-
func toHexspeak(num string) string { x, _ := strconv.Atoi(num) t := strings.ToUpper(fmt.Sprintf("%x", x)) t = strings.ReplaceAll(t, "0", "O") t = strings.ReplaceAll(t, "1", "I") for _, c := range t { if c >= '2' && c <= '9' { return "ERROR" } } return t }