zoukankan      html  css  js  c++  java
  • Integer to Roman 问题

    Integer to Roman 问题

    1.问题描述

    Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.
    题目翻译:
    把给定的一个整数翻译成罗马数字,这个整数限定在1到3999范围内。

    2.解题思路

    这道题给的范围很巧妙,因为在1-3999这个范围内罗马数字是有规律可寻的:

    {"","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"}
    

    可以看到每一行只下标为4、5、9、的比较特殊,其他I、X、C、M分别代表1、10、100、1000,而V、L、D分别代表5、50、500,在此基础上构成了各个数值,也就是说只要能判断出这些特殊的情况,就能解决问题。但是当然这道题也可以用暴力解法,把这个整数一步步分解成个、十、百、千来分别查找技能解决问题。

    3.代码实现

    1. 暴力解法
    class Solution {
        public String intToRoman(int num) {
            		 String[][] c={
    		            {"","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"}
    		        };
    		 
    		 StringBuffer res = new StringBuffer();
    		 int tmp= 0;
    		 res.append(c[3][num / 1000 % 10]);
    	     res.append(c[2][num / 100 % 10]);
    	     res.append(c[1][num / 10 % 10]);
    	     res.append(c[0][num % 10]);
    		 return res.toString();
        }
    }
    
    1. 利用特殊数字
    class Solution {
       public String intToRoman(int num) {
             StringBuffer str = new StringBuffer();    
             String [] symbol = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};    
             int [] value = {1000,900,500,400, 100, 90,  50, 40,  10, 9,   5,  4,   1};   
             for(int i=0;num!=0;i++){  
                 while(num >= value[i]){//循环是为了处理重复的情况
                     num -= value[i];  
                     str.append(symbol[i]);  
                 }  
            }  
           return str.toString();  
       }
    }
    
  • 相关阅读:
    JS调试工具
    什么是Web Service?
    win7怎么安装消息队列 MSMQ
    死锁产生的原因及四个必要条件
    项目管理模式之如何去除SVN标记
    AJAX中的请求方式以及同步异步的区别
    敏捷软件开发模型--SCRUM
    堆和栈
    UI产品设计流程中的14个要点
    Android中dp和px之间进行转换
  • 原文地址:https://www.cnblogs.com/chailinbo/p/7515804.html
Copyright © 2011-2022 走看看