前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode - 整数转罗马数字

LeetCode - 整数转罗马数字

作者头像
晓痴
发布2019-08-27 16:14:02
9700
发布2019-08-27 16:14:02
举报
文章被收录于专栏:曌的晓痴曌的晓痴

LeetCode第12题,难度中等。整数转罗马数字对应罗马数字转整数,这两题其实是有很大联系的。当然,我都没做好。

原题地址:https://leetcode-cn.com/problems/integer-to-roman/

题目描述

题目很简单,给定1-3999范围内的任意整数,要求将其转换为对应的罗马数字。

罗马数字的规则可参考上一篇公众号文章LeetCode - 罗马数字转整数

解题思路:

惯例就是先定义一个二维字符数组,把1-3000的都定义好。

首先第一步还是先获取千位的罗马数字,再依次获取百位、十位、个位的罗马数字。

在获取每位的字符的时候,采用的方式是看其本身除以1000/100/10/1之后对10取模的结果,然后从二维字符数组中获取对应的字符串。

优化点在于:

  1. 把STRINGS提到类变量的级别
  2. 先计算num除以1000的值,然后存下来后,直接给后面用,减少除法代价....
  3. 当然更好的解法肯定在下面。

中文官网题解:

https://leetcode-cn.com/problems/integer-to-roman/solution/

个人题解:

class Solution {
    public String intToRoman(int num) {
        String[][] STRINGS = new String[][] {
      { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" },
      { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" },
      { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" }, { "", "M", "MM", "MMM" } };
        String roman = "";
    roman += STRINGS[3][num / 1000 % 10];
    roman += STRINGS[2][num / 100 % 10];
    roman += STRINGS[1][num / 10 % 10];
    roman += STRINGS[0][num % 10];
    return roman;
    }
}

结果:

和罗马数字转整数一样,时间都是差不多90多毫秒,都属于在图上看不见的位置。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曌的晓痴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档