精选文章 LeetCode12.整数转罗马数字

LeetCode12.整数转罗马数字

作者:Achillesssss 时间: 2020-08-05 03:24:52
Achillesssss 2020-08-05 03:24:52

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

示例 1:

输入: 3
输出: "III"
示例 2:

输入: 4
输出: "IV"
示例 3:

输入: 9
输出: "IX"
示例 4:

输入: 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例 5:

输入: 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

方法一(不推荐)

class Solution {
    public String intToRoman(int num) {
        String str = "";
        if (num >1000){
            int count = num/1000;
            for(int i = 0; i= 100){
            int count = num/100;
            if (count == 9)
                str += "CM";
            else if(count > 5){
                str += "D";
                int temp = count;

                while(temp > 5){
                    str += "C";
                    temp--;

                }
            }

            else if (count == 5){
                str += "D";

            }
            else if (count == 4){
                str += "CD";
            }
            else{
                int temp = count;
                while(count>=1){
                    str += "C";
                    temp--;
                }
            }
            num -= count * 100;
            }

        if (num >= 10){
            int count = num/10;
            if(count == 9){
                str += "XC";
            }
            else if (count>5){
                str += "L";
                int temp = count;
                while (temp > 5){
                    str += "X";
                    temp--;
                }
            }
            else if (count==5){
                str += "L";
            }
            else if (count==4){
                str += "XL";
                
            }
            else{
                int temp = count;
                while(temp >= 1){
                    str += "X";
                    temp--;

                }
            }
            num -= count * 10; 
            }
        if (num > 0){
            int count = num;
            if(count == 9){
                str += "IX";
            }
            else if(count > 5){
                str += "V";
                int temp = count;
                while(temp > 5){
                    str += "I";
                    temp--;
            
                }
            }
            else if(count == 5){
                str += "V";

            }
            else if(count == 4){
                str += "IV";
            }
            else{
                int temp = count;
                while(temp>0){
                    str += "I";
                    temp--;
                }
            }
        }
    return str;
    }
  }  

解法二:

class Solution {
    public String intToRoman(int num) {
        Map map = new HashMap();
        map.put(1000,"M");
        map.put(900,"CM");
        map.put(500,"D");
        map.put(400,"CD");
        map.put(100,"C");
        map.put(90,"XC");
        map.put(50,"L");
        map.put(40,"XL");
        map.put(10,"X");
        map.put(9,"IX");
        map.put(5,"V");
        map.put(4,"IV");
        map.put(1,"I");
        
        String str = "";
        int count = 0;
        int m = 1000;
        while(num > 0){
            count = num/m;
            num -= count * m;
            if (count == 9){
                str += map.get(m) + map.get(m*10);
            }
            else if (count >= 5){
                str += map.get(5*m);
                while (count-- > 5){
                    str += map.get(m);
                }

            }
            else if (count == 4){
                str += map.get(m) + map.get(5*m);

            }
            else{
                while (count-- > 0){
                    str += map.get(m);
                }
            }

            m /= 10;
        }
        return str;
    }
       
}

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:怎样学习Python

下一篇:Apache Dubbo 简介

您可能感兴趣

  • Marvrodi Salute Vison落地布局DeFi:驶向DeFi的星辰大海

    在主流币和比特币行情索然无味的这几个月内,以太坊的DeFi却意外成为了 2020 年区块链行业的一匹黑马,DeFi概念币价格表现也非常亮眼,短期内都有2~4倍的价格涨幅。 据DeFi Market Cap的数据, DeFi 项目的总市值从仅仅10亿美元,已经暴涨至 74 亿美元,这仅仅用了2个月的时间,涨幅高达惊人的 700% 以上。而且,DeFi 项目上的锁仓资金也窜升至20.8亿美元,D...

  • 屠杀机器人和无处不在的监控:AI是我们最大的生存威胁?

    导读:几十年来,人工智能(artificial intelligence,AI)一直是学术界的白日梦。计算机可以像人类一样学习的想法似乎是不可能的。 随着处理能力成本的大幅下降,科学家们终于发现了如何编写和实现人工智能程序,这些程序可以教计算机学习如何使用类似人的逻辑来解决问题。到目前为止取得的阶段性成功,令人印象深刻。 计算能力的进步,再加上人工智能,意味着我们作为一个社会所面临的许多重大...

  • 【Python】在文章中提取标注的词和其对应的序列号

    前两天用Python帮同学完成了一个自动检索需要标注的词和对应序列号的问题,当时写程序写老好一会,现在回想起来,算是一个比较容易的程序,这是除了毕业设计以外第一次用Python解决的实际问题,先记录下。 似乎是人脑图谱需要一些标注的数据,他们的师兄给了一个原始的数据库(txt文件,文件大小是142Mb),需要他们做的是,找100句新闻语料,把其中的关键词,在原始数据库里找到对应的序列号,标注...

  • 为Navicat正名,Navicat完全使用手册(上)

    点击关注上方“SQL数据库开发”, 设为“置顶或星标”,第一时间送达干货 之前给小伙伴们推荐一款数据库开发工具DataGrip 《干掉Navicat,这个数据库管理工具真香!》 最近使用了DataGrip一段时间,发现它并不适合我,因为我平时不仅仅要写代码,也要负责数据仓库的建设和数据库管理的一些工作。 这里给小伙伴们罗列几个我在使用DataGrip中一些不足的地方: 用户体验并不十分友好,...

  • 这款APP让你免费无限畅享高质量阅读

    一款强大无比的阅读APP,文末有下载方式! 前不久,一个偶然的机会听了一段关于马尔克斯《百年孤独》的介绍。突然,勾起我强烈想要看这本早有耳闻的知名书籍。 于是,我兴致冲冲地打开微信读书,书架没有相关书籍。 这么经典的书竟然都没有? 于是我又转向网易蜗牛阅读,依然没有找到这本书籍。 顿时,让我有一种强烈的失望之感,找一本如此知名的书籍都那么费劲,那么要看那些冷门的岂不是更是难上加难? 作为一个...

  • 狂砸209亿美元筹码,ADI能否挑战德州仪器的“铁王座”?

    经济动荡时刻最适合干什么?当然是趁打折抄底了。 最近半导体行业似乎都掌握了这一省钱技能,接连传出大宗并购消息。 当大家都好奇软银会以多少钱卖掉320亿美元买来的ARM时,美国半导体制造商Analog Devices Inc(ADI)抢先以209亿美元的筹码,拿下了竞争对手Maxim Integrated Products(Maxim美信),夺得今年美国最大的并购金主(截至目前)。 ADI和美...

  • kaldi介绍

    Kaldi 介绍 Kaldi 是由 C++ 编写的语音识别工具,其目的在于为语音识别研究者提供一个研究和使用的平台。 Kaldi 环境搭建 本文主要通过使用 Docker 和 Nvidia-docker 构建 Ubuntu 环境对 Kaldi 进行搭建。Docker 针对的是无 GPU 的环境,Nvidia-docker 针对的是需要使用 GPU 计算的环境,如果读者机器上存在 GPU 计算...

  • 点评:中美人工智能关系愈加紧张:百度宣布退出由美主导的人工智能联盟道翰天琼认知智能机器人大脑API接口平台。

    摘要:百度,是人工智能合作伙伴(Partnership on Artificial Intelligence)中唯一的中国成员。该合作伙伴由美国牵头,旨在促进双方在伦理道德问题上的合作。   作为我国的搜索公司巨头——百度,已经宣布退出了由美国主导的人工智能合作伙伴关系(Partnership on Artificial Intelligence,简称PAI)。PAI,这是一个由美国主导的,...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。