(1)Excel Sheet Column Number
解题思路:将26进制的数转化为10进制
代码如下:
1 public class Solution { 2 public int titleToNumber(String s) { 3 return s.length() == 0 ? 0 : (s.charAt(s.length() - 1)-'A' + 1) + 26 * titleToNumber(s.substring(0 , s.length() - 1)); 4 } 5 }
(2)Roman to Integer
解题思路:
使用HashMap存入7个罗马字母和相对应的整数,然后从最低位(最右)开始依次跟相邻高位作比较,低位数字小的话就相加,低位数字大的话就相减。
代码如下;
1 public class Solution { 2 public int romanToInt(String s) { 3 if (s == null || s.length()==0) { 4 return 0; 5 } 6 Map<Character, Integer> m = new HashMap<Character, Integer>(); 7 m.put('I', 1); 8 m.put('V', 5); 9 m.put('X', 10); 10 m.put('L', 50); 11 m.put('C', 100); 12 m.put('D', 500); 13 m.put('M', 1000); 14 15 int length = s.length(); 16 int result = m.get(s.charAt(length - 1)); 17 for (int i = length - 2; i >= 0; i--) { 18 if (m.get(s.charAt(i + 1)) <= m.get(s.charAt(i))) {//小的数字在大的数字右边 19 result += m.get(s.charAt(i)); 20 } else { 21 result -= m.get(s.charAt(i));//小的数字在大的数字左边 22 } 23 } 24 return result; 25 } 26 }
(3) Add Strings
代码如下:
1 public class Solution { 2 public String addStrings(String num1, String num2) { 3 StringBuilder sb = new StringBuilder(); 4 int carry = 0;//进位 5 for(int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0 || carry == 1; i--, j--){ 6 int x = i < 0 ? 0 : num1.charAt(i) - '0'; 7 int y = j < 0 ? 0 : num2.charAt(j) - '0'; 8 sb.append((x + y + carry) % 10); 9 carry = (x + y + carry) / 10; 10 } 11 return sb.reverse().toString(); 12 } 13 }
解题思路:
使用Java中的StringBuilder类新建一个对象sb,用carry表示进位值。两个字符串同时从最低位(最右)字符开始相加,sb中添加x+y+carry%10的余数,carry更新为新的进位值,直至所有数字都相加而且进位为0时将字符串sb反转返回即可。
(4)Power of Three
解题思路:
假设一个数Num是3的幂,那么所有Num的约数都是3的幂,如果一个数n小于Num且是3的幂,那么这个数n一定是Num的约数。
了解上述性质,我们只需要找到一个最大的3的幂,看看参数n是不是此最大的幂的约数就可以。
代码如下:
1 public class Solution { 2 public boolean isPowerOfThree(int n) { 3 // 1162261467 is 3^19, 3^20 is bigger than int 4 return (n > 0 && 1162261467 % n == 0); 5 } 6 }
(5)Power of Two
解题思路:
代码如下:
1 public class Solution { 2 public boolean isPowerOfTwo(int n) { 3 return ((n & (n-1))==0 && n>0); 4 } 5 }
(6)Ugly Number
解题思路:
num被2,3,5整除之后判断商是否等于1,不等于1说明有别的除数,不是uglynumber。
代码一如下:
1 public class Solution { 2 public boolean isUgly(int num) { 3 //不会用到4 ,因为4是2的2倍。 4 for (int i = 2; i < 6 && num > 0; i++) { 5 while (num % i == 0) { 6 num /= i; 7 } 8 } 9 return num == 1; 10 } 11 }
代码二如下:
1 public class Solution { 2 /** 3 * @param num an integer 4 * @return true if num is an ugly number or false 5 */ 6 public boolean isUgly(int num) { 7 if (num <= 0) return false; 8 if (num == 1) return true; 9 10 while (num >= 2 && num % 2 == 0) num /= 2; 11 while (num >= 3 && num % 3 == 0) num /= 3; 12 while (num >= 5 && num % 5 == 0) num /= 5; 13 14 return num == 1; 15 } 16 }