ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode每日一练【12】

2022-04-29 16:31:46  阅读:147  来源: 互联网

标签:12 return 每日 Roman value 罗马数字 num romanVals LeetCode


LeetCode -- Integer to Roman

除数计数法

思路:

  1. 将所有罗马数字和数字的映射关系存储到对象中
  2. 依次使用罗马数字对应的数字数组romanVals与参数数字进行除法操作(获取罗马数字重复次数digit)和求余操作(判断罗马数字的类型)
  3. 根据获得到的罗马数字对应的数字value, 返回罗马数字, 然后再进行重复, 加入的结果字符串res
/*
 * @Author: fox
 * @Date: 2022-04-29 10:27:49
 * @LastEditors: fox
 * @LastEditTime: 2022-04-29 11:49:56
 * @Description: https://leetcode.com/problems/integer-to-roman/
 */
/**
 * @description: 经过测试,这并不是一个很好的方案,效率有点低
 * @param {number} num 整型数字
 * @return {string} 罗马数字
 */
const Roman = {
  I: 1,
  IV: 4,
  V: 5,
  IX: 9,
  X: 10,
  XL: 40,
  L: 50,
  XC: 90,
  C: 100,
  CD: 400,
  D: 500,
  CM: 900,
  M: 1000,  
};
const intToRoman = (num) => {
    let digit; // 个数
    let res = ''; // 返回字符串
    const romanVals = Object.values(Roman) // 罗马数字的value数组
    
    for (let i = romanVals.length - 1; i >= 0 && num > 0; i--) {
        digit = Math.floor(num / romanVals[i]) // 获取罗马数字的个数
        res += findKey(romanVals[i]).repeat(digit) // 复制罗马数字
        num %= romanVals[i] // 计算余数
    }

    return res
};

/**
 * @description: 根据对象的value返回对应的key
 * @param {*} value value
 * @param {*} compare 比较函数
 * @param {*} b
 * @return {*}
 */
const findKey = (value, compare = (a, b) => a === b) => {
    return Object.keys(Roman).find(index => {
        return compare(value, Roman[index])
    })
};

let value;

value = 3;
console.log(intToRoman(value)); // III

value = 58;
console.log(intToRoman(value)); // LVIII

value = 1994;
console.log(intToRoman(value)); // MCMXCIV

标签:12,return,每日,Roman,value,罗马数字,num,romanVals,LeetCode
来源: https://www.cnblogs.com/mapodoufu/p/16207089.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有