解法:
4/17/26About 1 min
class Solution {
public int reverse(int x) {
long res = 0;
int m = 0;
while(x != 0){
m = m % 10;
res = res * 10 + m;
x /= 10;
}
return (int)res == res ? (int)res : 0;
}
}
class Solution {
public boolean isPalindrome(int x) {
if(x < 0){
return false;
}
int y = x;
int z = 0;
while(x != 0){
z = z * 10 + (x % 10);
x /= 10;
}
return z == y;
}
}
class Solution {
public String intToRoman(int num) {
return(toStr(num));
}
public String toStr(int num){
StringBuilder temp = new StringBuilder();
int x = 0;
if(num <= 0){
return "";
}else if (num >= 1000) {
x = num / 1000;
for(int i = 0;i < x;i++){
temp.append("M");
}
return temp.toString() + toStr(num % 1000);
}else if (num >= 900 && num < 1000) {
return "CM" + toStr(num - 900);
}else if (num >= 500 && num < 1000){
return "D" + toStr(num - 500);
}else if (num >= 400 && num < 500) {
return "CD" + toStr(num - 400);
}else if (num >= 100 && num < 500) {
x = num / 100;
for(int i =0;i < x;i++) {
temp.append("C");
}
return temp.toString() + toStr(num % 100);
}else if(num >= 90 && num < 100){
return "XC" + toStr(num - 90);
}else if (num >= 50 && num < 100) {
return "L" + toStr(num - 50);
}else if (num >= 40 && num < 50 ) {
return "XL" + toStr(num - 40);
}else if (num >= 10 && num < 50) {
x = num / 10;
for(int i = 0;i < x;i++){
temp.append("X");
}
return temp.toString() + toStr(num % 10);
}else if (num == 9) {
return "IX";
}else if (num >= 5 && num < 10) {
return "V" + toStr(num - 5);
}else if(num == 4){
return "IV";
} else if (num < 5) {
for(int i = 0;i < num;i++){
temp.append("I");
}
return temp.toString();
}
return null;
}
}
class Solution {
public int romanToInt(String s) {
int len = s.length();
int[] num = new int[len];
for(int i = 0;i < len;i++){
switch(s.charAt(i)){
case 'M': num[i] = 1000;break;
case 'D': num[i] = 500;break;
case 'C': num[i] = 100;break;
case 'L': num[i] = 50;break;
case 'X': num[i] = 10;break;
case 'V': num[i] = 5;break;
case 'I': num[i] = 1;break;
}
}
int sum=0;
for(int i = 0;i < len;i++){
if(i+1 != len){
if(num[i] < num[i+1]){
num[i] = -num[i];
}
}
sum += num[i];
}
return sum;
}
}
class Solution {
public int divide(int dividend, int divisor) {
if(dividend == -2147483648 && divisor == -1){
return 2147483647;
}
if(divisor == 1){
return dividend;
}
if(divisor == -1){
return -dividend;
}
boolean flag = true;
if(dividend < 0 && divisor > 0 || dividend > 0 && divisor < 0){
flag = false;
}
int LIMIT = -1073741824;
int a = dividend < 0 ? dividend : -dividend;
int b = divisor < 0 ? divisor : -divisor;
int res = 0;
while(a <= b){
int c = b,d = -1;
while(c >= LIMIT && d >= LIMIT && c >= a - c){
c += c;
d += d;
}
a -= c;
res += d;
}
return flag ? -res : res;
}
}
class Solution {
public String multiply(String num1, String num2) {
if(num1.equals("0")|| num2.equals("0")){
return "0";
}
StringBuilder res = new StringBuilder();
int len1 = num1.length();
int len2 = num2.length();
int maxlen = 0;
for (int i = len1 - 1; i >= 0; i--) {
int n1 = num1.charAt(i) - 48;
int add = 0;
StringBuilder temp = new StringBuilder();
for (int j = len2 - 1; j >= 0; j--) {
int n2 = num2.charAt(j) - 48;
int mul = n1 * n2;
if(j != 0){
temp.append((mul+ add) % 10);
add = (mul+ add) / 10;
}else {
StringBuilder s = new StringBuilder();
s.append(add + mul);
temp.append(s.reverse());
}
}
temp = temp.reverse();
for (int j = 0; j < len1 - 1 - i; j++) {
temp.append(0);
}
maxlen = res.length() > temp.length() ? res.length() : temp.length();
int add_2 = 0;
temp.reverse();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < maxlen; j++) {
int a = j >= temp.length() ? 0 : temp.charAt(j) - 48;
int b = j >= res.length() ? 0 : res.charAt(j) - 48;
if(j == maxlen - 1){
StringBuilder s = new StringBuilder();
s.append(a + b + add_2);
sb.append(s.reverse());
break;
}
sb.append((a + b + add_2) % 10);
add_2 = (a + b + add_2)/10;
}
res = sb;
}
return res.reverse().toString();
}
}
class Solution {
public void rotate(int[][] matrix) {
int len = matrix.length;
for(int i = 0;i < len / 2;i++){
int a3 = matrix[len - i - 1][i];
int a4 = matrix[len - i - 1][len - i - 1];
int count = 0;
int[] temp = new int[len];
int[] temp2 = new int[len];
int[] temp3 = new int[len];
for (int j = i; j < len - i; j++) {
temp3[j - i] = matrix[i][j];
}
for(;count < 4;count++){
if(count == 0){
for(int j = i;j < len - i;j++){
temp[j - i] = matrix[j][len - i -1];
matrix[j][len - i -1] = temp3[j - i];
}
count++;
}
if(count == 1){
for(int j = i;j < len - i;j++){
temp2[j - i] = matrix[len - i -1][j];
matrix[len - i -1][j] = temp[len - i - 1 - j];
}
temp2[len - i - 1 - i] = a4;
count++;
}
if(count == 2){
for (int j = i; j < len - i; j++) {
temp[j - i] = matrix[j][i];
matrix[j][i] = temp2[j - i];
}
temp[len - i - 1 - i] = a3;
count++;
}
if(count == 3){
for (int j = i; j < len - i; j++) {
matrix[i][j] = temp[len - i - 1 - j];
}
count++;
}
}
}
}
}
class Solution {
public double myPow(double x, int n) {
if(x > -0.5 && x < 0.5 && n > 50){
return 0;
}
if(x == 1){
return 1;
}
if(x == -1){
return n % 2 == 0 ? 1 : -1;
}
if(n == 0){
return 1;
}
if(n == 1){
return x;
}
if(n == -1){
return 1.0/x;
}
int a = n / 2;
int b = n - a;
return myPow(x,a) * myPow(x,b);
}
}
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length;
len--;
digits[len] += 1;
while(len > 0 && digits[len] >= 10){
digits[len] = digits[len] % 10;
digits[--len] += 1;
}
if(digits[0] != 10){
return digits;
}else{
int[] res = new int[digits.length + 1];
res[0] = 1;
return res;
}
}
}