12.integer to Roman

//罗马数字不是很懂,结果糊涂到 49 999 都用两个罗马数字表示 结果错了 因为 每个罗马数字最多用三次
class Solution {//本题的思路很简单 就是一直循环到满足下一个循环条件 
  public String intToRoman(int num) {//解法容易 写法啰嗦 然后我看了其他人的写法 自己也分析了以下
        String result = "";
        while (num >= 1000) {
            result += "M";
            num -= 1000;
        }
        while (num >= 900) {
            result += "CM";
            num -= 900;
        }
        while (num >= 500) {
            result += "D";
            num -= 500;
        }
        while (num >= 400) {
            result += "CD";
            num -= 400;
        }
        while (num >= 100) {
            result += "C";
            num -= 100;
        }
        while (num >= 90) {
            result += "XC";
            num -= 90;
        }
        while (num >= 90) {
            result += "XC";
            num -= 90;
        }
        while (num >= 50) {
            result += "L";
            num -= 50;
        }
        while (num >= 40) {
            result += "XL";
            num -= 40;
        }
        while (num >= 10) {
            result += "X";
            num -= 10;
        }
        while (num >= 9) {
            result += "IX";
            num -= 9;
        }
        while (num >= 5) {
            result += "V";
            num -= 5;
        }
        while (num >= 4) {
            result += "IV";
            num -= 4;
        }
        while (num >= 1) {
            result += "I";
            num -= 1;
        }
        return result;
    }
}

别的大佬的做法 我也分析了以下 加了旁注

//两道题思路差不多
class Solution {

    private String[] symbols = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};//创建一个数组 保存各种形式的两个罗马数组合以及单个
    private int[] values = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000, Integer.MAX_VALUE};//跟上面一一对应 最后加上了一个int最大值

    public String intToRoman(int num) {
        StringBuilder builder = new StringBuilder();//创建一个可变的字符串 因为性能的原因 不用 str+str2的 方法 我也转载了一篇StringBuilder()的介绍 
        int input = num;

        while(input > 0){//循环条件输入不为0
            int index = getNearestIndex(input);//索引 index
            builder.append(symbols[index]);
            input -= values[index];//减去已经加进去字符串种所对应的值
        }

        return builder.toString();//返回整个字符串
    }

    public int getNearestIndex(int num){
        int index = 0;
        while(index < values.length){//一个一个索引
           if(values[index] < num){//value[]是从小到大排序
               index++;
           } else if(values[index] > num){
               return index - 1;
           } else {
               break;//找到了跳出来
           }
        }

        return index;
    }
}
全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务