zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    温昱谈架构和框架(Framework)的区别
    温故而知新:HttpApplication,HttpModule,HttpContext及Asp.Net页生命周期
    怎么设计一个好的数据库
    ORACLE修改表空间方法
    为[ double ] 类型 添加[zzzzz]方法
    常用的html代码 加粗 加亮 字型加大 变色等
    ASP.NET页面级别的事务
    无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
    把漫画浏览器的离线下载的功能给实现了一下
    以前写的IE9鼠标手势插件在IE10下也能工作
  • 原文地址:https://www.cnblogs.com/cznczai/p/11150537.html
Copyright © 2011-2022 走看看