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$.
1
2
3
4
5
| 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'
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 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;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| 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;
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
| 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
}
|