leetcode3.4(判断整数是否是回文数,罗马数字转换成整数)

it2023-07-21  71

3.判断整数是否是回文数(正序和倒序读是一样的整数)

public class HuiWenShu { public static void main(String[] args) { boolean palindrome = isPalindrome(12321); System.out.println(palindrome); } public static boolean isPalindrome(int x){ if (x < 0|| x%10 == 0 && x != 0){ // x为负数 或 x能整除10 并且x不能为0时,返回不是回文数false return false; } int rev = 0; // 反转后半部分的值 while (rev<x){ // 半部分的值小于每进行一次循环x除10的值时,继续循环,否则退出 /** * 121 * ① rev=0*10+121%10=1 x=121/10=12 * ② rev=1*10+12%10=10+2=12 x=12/10=1 * ③ while(12<12)不进入循环 * return 12==12(x==rev)返回true */ rev = rev*10+x%10; // 对反转的一个值(初始为0)乘10+每轮对原值先取余再除10的值 x/=10; } return x == rev || x == rev/10; } }

4.罗马数字转换成整数。

public class LuomaShuZi { public static void main(String[] args) { int res = romanToInt("XVII"); System.out.println(res); } public static int romanToInt(String s){ int sum = 0; int preNum = getValue(s.charAt(0)); // 第一个值 for (int i=1; i<s.length(); i++){ int num = getValue(s.charAt(i)); // 后者值 if (preNum < num){ // 前者值 < 后者值 sum = sum - preNum; // 少去的值 }else{ // preNum > num (VI) preNum = num (II) sum = sum + preNum; // 多出的值 } // 防止preNum永远为字符串第一个值,每轮循环preNum都要改变 preNum = num; // preNum为当前num值得前一个值 } sum = preNum + sum; // 当前者比后者大,sum值大,preNum值小 return sum; } private static int getValue(char ch) { switch (ch){ case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: return 0; } } }
最新回复(0)