力扣第十二题

public static String intToRoman(int num) {
            StringBuilder sb = new StringBuilder();
            Map<String, Integer> map = new LinkedHashMap<String, Integer>();
            map.put("M",1000);
            map.put("CM",900);
            map.put("D",500);
            map.put("CD",400);
            map.put("C",100);
            map.put("XC",90);
            map.put("L",50);
            map.put("XL",40);
            map.put("X",10);
            map.put("IX",9);
            map.put("V",5);
            map.put("IV",4);
            map.put("I",1);
            System.out.println(map);
            Set<String> keySet = map.keySet();
            while(num>0){
                for(String key:keySet){
                    if(map.get(key)<=num) {
                        num-= map.get(key);
                        sb.append(key);
                        break;
                    }
                }
            }
            return sb.toString();

    }

一开始用的HashMap存储数据,结果发现他不能够按序存储,在网上查资料又使用了LinkedHashMap,虽然最后通过了,但时间和内存分别击败了5%和15%的人,很显然这个方法是不够好的。

推荐使用官方解法:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值