//根据规律定义两个数组 一个罗马数组一个整数数组 其位置一一对应
int[] nums={1,4,5,9,10,40,50,90,100,400,500,900,1000};
String[] str={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CL","L"};
StringBuffer out=new StringBuffer();
//然后尝试先输出最大值
for(int i=12;i>=0;i--){
while(num>=nums[i]){
num-=nums[i];
str.append(str[i]);
}
}
//罗马数
//I V X L C D M ————1 5 10 50 100 500 1000
//特殊数字
//4 9 40 90 400 900————惊呼 太巧秒了
//这里得反思一下 在写的时候 我也知道是从后开始比较才好找
//我开始的做法是 每次取余数,然后获得 依次乘1 10 100等
//而且我惯性思维 先求最小的 然后再求大的
//总结:首先要找到对应规律,然后要尽量不要常规思路去求解 这样只会出现很多代码
//有时 for从后开始,或者for定义了一个i 根据规律可得另外一个指针的位置
class Solution {
public String intToRoman(int num) {
//罗马数
//I V X L C D M ————1 5 10 50 100 500 1000
//特殊数字
//4 9 40 90 400 900————惊呼 太巧秒了
//这里得反思一下 在写的时候 我也知道是从后开始比较才好找
//我开始的做法是 每次取余数,然后获得 依次乘1 10 100等
//而且我惯性思维 先求最小的 然后再求大的
//总结:首先要找到对应规律,然后要尽量不要常规思路去求解 这样只会出现很多代码
//有时 for从后开始,或者for定义了一个i 根据规律可得另外一个指针的位置
int[] nums={1,4,5,9,10,40,50,90,100,400,500,900,1000};//总共13位数字
String[] str={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
StringBuffer out=new StringBuffer();
for (int i = 12; i >=0 ; --i) {//从最大的开始寻找
while (num>=nums[i]){
//当第一次大于它时 输出对应i的罗马
num-=nums[i];
out.append(str[i]);
//out+=str[i];
}
}
return out.toString();
}
}