leetcode_middle_22_12. Integer to Roman

来源:互联网 发布:android 电子书源码 编辑:程序博客网 时间:2024/06/04 19:06

题意:

给定一个整数,将其变为罗马数字输出

分析:

首先来看罗马数字是怎样的:

I(1),V(5),X(10),L(50),C(100),D(500),M(1000)
一个罗马数字重复几次,就表示这个数的几倍
 

本来我的思路是从1000开始去作除法,处理完七个,但是发现逻辑是不对的,除此之外还有两个问题。首先过多的条件判断,一定要利用循环,显然想到放入数组,对数组循环,放入数组就可以利用循环了。其次,本来sb.append是单独循环处理的,其实可以放入处理num的数据的循环里面处理。

小结:数据的存储和处理,一定要思考有没有办法简化,合并,因为人的思维很多时候是一种复杂的直接的思路,比如对一个例子3200,就容易想到取商取得3,然后循环三次,放M入字符串,然后对num取余处理。然后对这样一个复杂的思路,我们可以去想实质上就是数字里面有几个1000,字符串就要加几个M,而且数字要变为去除这些1000之后的数字。所以很自然的我们发现采取数字每减1000的同时字符串加一个M的方式,直到数字小于1000。(显然是一个内层while循环)

参考之后的代码:

public class Solution {    public String intToRoman(int num) {    int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1};    String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};  //i将两个数组的内容对应起来,和map比,容易遍历        StringBuilder sb = new StringBuilder();        for(int i=0;i<values.length;i++) {        while(num >= values[i]) {            num -= values[i];            sb.append(strs[i]);        }    }    return sb.toString();    }}


0 0
原创粉丝点击