class Solution {
public:
string toHexspeak(string num) {
}
};
1271. 十六进制魔术数字
你有一个十进制数字,请按照此规则将它变成「十六进制魔术数字」:首先将它变成字母大写的十六进制字符串,然后将所有的数字 0
变成字母 O
,将数字 1
变成字母 I
。
如果一个数字在转换后只包含 {"A", "B", "C", "D", "E", "F", "I", "O"}
,那么我们就认为这个转换是有效的。
给你一个字符串 num
,它表示一个十进制数 N
,如果它的十六进制魔术数字转换是有效的,请返回转换后的结果,否则返回 "ERROR"
。
示例 1:
输入:num = "257" 输出:"IOI" 解释:257 的十六进制表示是 101 。
示例 2:
输入:num = "3" 输出:"ERROR"
提示:
1 <= N <= 10^12
原站题解
golang 解法, 执行用时: 4 ms, 内存消耗: 1.9 MB, 提交时间: 2023-10-15 19:26:02
func toHexspeak(num string) string { ints, _ := strconv.Atoi(num) h := fmt.Sprintf("%x",ints) abs:= []byte(h) maps := map[byte]byte{ '0':'O', '1':'I', 'a':'A', 'b':'B', 'c':'C', 'd':'D', 'e':'E', 'f':'F', } var ans string for _,v := range abs{ _,ok := maps[v] if !ok { return "ERROR" } ans += string(maps[v]) } return ans }
java 解法, 执行用时: 6 ms, 内存消耗: 40.4 MB, 提交时间: 2023-10-15 19:25:51
class Solution { public String toHexspeak(String num) { long value = Long.valueOf(num), modValue; String ret = ""; while(value != 0) { modValue = value & 15; if (modValue == 0) ret = "O" + ret; else if (modValue == 1) ret = "I" + ret; else if (modValue >= 10) ret = (char)('A' + modValue - 10) + ret; else return "ERROR"; value >>= 4; } return ret; } }
python3 解法, 执行用时: 32 ms, 内存消耗: 16 MB, 提交时间: 2023-10-15 19:25:33
class Solution: def toHexspeak(self, num: str) -> str: num_hex = hex(int(num))[2:] transform = { "0": "O", "1": "I", "a": "A", "b": "B", "c": "C", "d": "D", "e": "E", "f": "F", } ans = "" for ch in num_hex: if ch not in transform: return "ERROR" ans += transform[ch] return ans
cpp 解法, 执行用时: 0 ms, 内存消耗: 6.5 MB, 提交时间: 2023-10-15 19:25:18
class Solution { public: string toHexspeak(string num) { stringstream ss; ss << hex << stol(num); string num_hex = ss.str(); unordered_map<char, char> transform = { {'0', 'O'}, {'1', 'I'}, {'a', 'A'}, {'b', 'B'}, {'c', 'C'}, {'d', 'D'}, {'e', 'E'}, {'f', 'F'}, }; string ans; for (char ch: num_hex) { if (!transform.count(ch)) { return "ERROR"; } ans += transform[ch]; } return ans; } };