返回介绍

solution / 1200-1299 / 1271.Hexspeak / README

发布于 2024-06-17 01:03:21 字数 2929 浏览 0 评论 0 收藏 0

1271. 十六进制魔术数字

English Version

题目描述

你有一个十进制数字,请按照此规则将它变成「十六进制魔术数字」:首先将它变成字母大写的十六进制字符串,然后将所有的数字 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
  • 给定字符串不会有前导 0 。
  • 结果中的所有字母都应该是大写字母。

解法

方法一:模拟

将数字转换为十六进制字符串,然后遍历字符串,将数字 $0$ 转换为字母 $O$,将数字 $1$ 转换为字母 $I$,最后判断转换后的字符串是否合法。

时间复杂度 $O(\log n)$,其中 $n$ 为 $num$ 所表示的十进制数字的大小。

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'
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;
  }
};
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
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文