第15天--算法(Leetcode 7,11,12,13)
7.整数反转
public int reverse(int x) {
boolean isFu = x < 0 ? true : false;
x = isFu ? x : -x;
int res = 0;
int M = Integer.MIN_VALUE / 10;
int N = Integer.MIN_VALUE % 10;
while(x != 0) {
if(res < M || (res == M && x % 10 < N)) {
return 0;
}
res = res * 10 + x % 10;
x /= 10;
}
return isFu ? res : -res;
}
11.盛水最多的容器
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int max = 0;
while(l < r) {
max = Math.max(max,Math.min(height[l],height[r]) * (r - l));
if(height[l] > height[r]) {
r --;
}else {
l ++;
}
}
return max;
}
12.整数转罗马数字
public String intToRoman(int num) {
String[][] c = {
{"","I","II","III","IV","V","VI","VII","VIII","IX","X"},
{"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","C"},
{"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","M"},
{"","M","MM","MMM"}
};
StringBuilder sb = new StringBuilder();
sb.append(c[3][num/1000]).append(c[2][num/100%10]).append(c[1][num/10%10]).append(c[0][num%10]);
return sb.toString();
}
13.罗马数字转整数
public int romanToInt(String s) {
char s1[] = s.toCharArray();
int arr[] = new int[s1.length];
for(int i = 0;i < s1.length;i ++) {
if(s1[i] == 'I') {
arr[i] = 1;
}else if(s1[i] == 'V') {
arr[i] = 5;
}else if(s1[i] == 'X') {
arr[i] = 10;
}else if(s1[i] == 'L') {
arr[i] = 50;
}else if(s1[i] == 'C') {
arr[i] = 100;
}else if(s1[i] == 'D') {
arr[i] = 500;
}else if(s1[i] == 'M') {
arr[i] = 1000;
}
}
int res = 0;
for(int i = 0;i < arr.length;i ++) {
if(i != arr.length - 1 && arr[i] < arr[i + 1]) {
res -= arr[i];
}else {
res += arr[i];
}
}
return res;
}

浙公网安备 33010602011771号