leetcode第12题

简介: 相当简洁了,主要就是把所有的组合列出来,因为罗马数字表示的大小就是把所有字母相加,所以每次 append 那个,再把对应的值减去就行了。时间复杂度:不是很清楚,也许是 O(1)?因为似乎和问题规模没什么关系了。空间复杂度:O(1)

image.png

top12

把数字转换成罗马数字,正常情况就是把每个字母相加,并且大字母在前,小字母在后,上边也介绍了像 4 和 9 那些特殊情况。

解法一

这个是自己的解法,主要思想就是每次取出一位,然后得到相应的罗马数字,然后合起来就行。

publicStringgetRoman(intnum,intcount){ //count 表示当前的位数,个位,十位...char[]ten={'I','X','C','M'}; //1,10,100,1000char[]five={'V','L','D'};//5,50,500Stringr="";
if(num<=3){
while(num!=0){
r+=ten[count];
num--;
        }
    }
if(num==4){
r=(ten[count]+"")+(five[count]+"");
    }
if(num==5){
r=five[count]+"";
    }
if(num>5&&num<9){
r=five[count]+"";
num-=5;
while(num!=0){
r+=ten[count];
num--;
        }
    }
if(num==9){
r= (ten[count] +"") + (ten[count+1] +"");
    }
returnr;
}
publicStringintToRoman(intnum) {
Stringr="";
intcount=0;
while(num!=0){
intpop=num%10;
r=getRoman(pop,count)+r;
count++;
num/=10;
    }
returnr;
}

时间复杂度:num 的位数 log_{10}(num)+1log10(num)+1所以时间复杂度是 O(log(n))。

空间复杂度:常数个变量,O(1)。

下边在分享一些 LeetCode 讨论里的一些解法。

解法二

https://leetcode.com/problems/integer-to-roman/discuss/6310/My-java-solution-easy-to-understand

publicStringintToRoman(intnum) {
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"};
StringBuildersb=newStringBuilder();
for(inti=0;i<values.length;i++) {
while(num>=values[i]) {
num-=values[i];
sb.append(strs[i]);
        }
    }
returnsb.toString();
}

相当简洁了,主要就是把所有的组合列出来,因为罗马数字表示的大小就是把所有字母相加,所以每次 append 那个,再把对应的值减去就行了。

时间复杂度:不是很清楚,也许是 O(1)?因为似乎和问题规模没什么关系了。

空间复杂度:O(1).


这道题感觉难度应该是 easy ,没有那么难,就是理清楚题意,然后就可以往出列举就行了。

相关文章
|
7月前
|
算法
leetcode:389. 找不同
leetcode:389. 找不同
29 0
顺手牵羊(LeetCode844.)
好多同学说这是双指针法,但是我认为叫它顺手牵羊法更合适
82 0
leetcode 827 最大人工岛
leetcode 827 最大人工岛
61 0
leetcode 827 最大人工岛
LeetCode 389. 找不同
给定两个字符串 s 和 t,它们只包含小写字母。
78 0
|
测试技术
一和零(LeetCode-474)
一和零(LeetCode-474)
139 0
一和零(LeetCode-474)
|
算法
LeetCode——944. 删列造序
LeetCode——944. 删列造序
111 0
LeetCode 283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
89 0
|
C++ Python
LeetCode 771. Jewels and Stones
LeetCode 771. Jewels and Stones
82 0