8. String to Integer (atoi)
还是考边界条件。。。
public class Solution {
public int myAtoi(String str) {
if (str == null) {
return 0;
}
str = str.trim();
int n = str.length();
int i = 0;
boolean pos = true;
if (i < n && (str.charAt(i) == '+' || str.charAt(i) == '-')) {
if (str.charAt(i) == '-') pos = false;
i++;
}
int res = 0;
while (i < n && Character.isDigit(str.charAt(i))) {
if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && str.charAt(i) - '0' > Integer.MAX_VALUE % 10)) {
return pos ? Integer.MAX_VALUE : Integer.MIN_VALUE ;
}
res = res * 10 + str.charAt(i) - 48;
i++;
}
return pos ? res : -res;
}
}
12. Integer to Roman
public class Solution {
public String intToRoman(int num) {
String res = "";
int[] numA = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] romA = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for (int i = 0; i < numA.length; i++) {
while (num >= numA[i]) {
res += romA[i];
num -= numA[i];
}
}
return res;
}
}
13. Roman to Integer
无聊的题目。。。
public class Solution {
public int romanToInt(String s) {
int nums[]=new int[s.length()];
for(int i=0;i<s.length();i++){
switch (s.charAt(i)){
case 'M':
nums[i]=1000;
break;
case 'D':
nums[i]=500;
break;
case 'C':
nums[i]=100;
break;
case 'L':
nums[i]=50;
break;
case 'X' :
nums[i]=10;
break;
case 'V':
nums[i]=5;
break;
case 'I':
nums[i]=1;
break;
}
}
int sum=0;
for(int i=0;i<nums.length-1;i++){
if(nums[i]<nums[i+1])
sum-=nums[i];
else
sum+=nums[i];
}
return sum+nums[nums.length-1];
}
}