LeetCode刷题笔记-12.整数转罗马数字

LeetCode刷题笔记-12.整数转罗马数字,第1张

LeetCode刷题笔记-12.整数转罗马数字
  • C代码
    • 注意点
    • 结果
  • 题目

C代码

int vals[] = {
    1000,
    900,
    500,
    400,
    100,
    90,
    50,
    40,
    10,
    9,
    5,
    4,
    1
};

char *rs[] = {
    [1000] = "M",
    [900] = "CM",
    [500] = "D",
    [400] = "CD",
    [100] = "C",
    [90] = "XC",
    [50] = "L",
    [40] = "XL",
    [10] = "X",
    [9] = "IX",
    [5] = "V",
    [4] = "IV",
    [1] = "I"
};

char * intToRoman(int num){
    int i;
    char *ret = NULL;
    int size = 0;
    int cap = 1 << 10;
    int cs = 0;
    
    ret = calloc(cap, sizeof(char));
    for (i = 0; i < 13; i++) {
        while(num >= vals[i]) {
            cs = strlen(rs[vals[i]]);
            num -= vals[i];
            if(size >= (cap - 3)) {
                cap = cap << 1;
                ret = realloc(ret, cap * sizeof(char));
            }
            strncpy(ret+size, rs[vals[i]], cs);
            size += cs;
        }
    }
    ret[size] = ';'return
    ; ret}
  • 转换类型的数组的长度为13个;
  • 注意点
      ret
    1. 组装size返回字符串的偏移需要控制,先判断空间是否最小预留3个,再拷贝字符串,最后统计最新的字符串长度[9]="IX";
    2. 注意映射表的建立,曾缺失,的条目导致报错;
    结果

    题目


    欢迎分享,转载请注明来源:内存溢出

    原文地址:https://54852.com/langs/567968.html

    (0)
    打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
    上一篇 2022-04-09
    下一篇2022-04-09

    发表评论

    登录后才能评论

    评论列表(0条)

      保存