(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 }
View Code

(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 }
View Code

(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 }
View Code

解题思路:

使用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 }
View Code

(5)Power of Two

解题思路:

代码如下:

1 public class Solution {
2     public boolean isPowerOfTwo(int n) {
3         return ((n & (n-1))==0 && n>0);
4     }
5 }
View Code

(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 }
View Code

代码二如下:

 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 }
View Code