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();  
       }
    }
    
  • 相关阅读:
    Robot Framework--06 用户关键字User Keyword
    Robot Framework--05 案例设计之流程与数据分离
    Robot Framework--04 工作区
    Robot Framework--03 案例及资源区
    Robot Framework--02 菜单栏&工具栏
    Robot Framework--01 创建简单工程示例
    uoj#35 后缀排序(后缀数组模版)
    【学习笔记】动态树Link-Cut-Tree
    【随意学学】三分法
    【学习笔记】dsu on tree
  • 原文地址:https://www.cnblogs.com/chailinbo/p/7515804.html
Copyright © 2011-2022 走看看