Java 题

1.两数之和

2.整数反转

3.判断是否为回文数:

思路:可以先提取出后半部分数字,

通过  x%10,取余,从后往前取出数字。x/10,取模,保存每次取出数字后的数字。reverse = reverse * 10 + pop; 来保存每次反转后的数字。

通过语句当x<reverse时,说明数字已经对半。如果是偶数的话,reverse和x相等;如果是奇数的话,最中间的数字就在reverse的最低位上,将它除以10以后应该和x相等。

class Solution {
    public boolean isPalindrome(int x) {
//思路:反转后半部分数字
    int reverse = 0;

    if(x<0 || (x%10==0 && x!=0)) return false;
    
    while (x>reverse){      //判断当x<reverse时,明数字已经对半。
        int pop = x%10;
        reverse= reverse*10 + pop;
        x = x/10;
    }
    return (x==reverse || x==reverse/10);   //如果是偶数的话,reverse和x相等;如果是奇数的话,最中间的数字就在reverse的最低位上,将它除以10以后应该和x相等。
    }
}

 

4.查找字符串数组中最长公共前缀:

思路:利用两个函数:a.函数 startsWith(String str):判断某个字符串是否以str为开头; b.函数 substring(int beginIndex, int endIndex):截取字符串的一部分,注意endIndex不取。

先定义一个新字符串prefix用来保存最长公共前缀,然后利用for循环从前往后遍历每一个字符,当与prefix不同时,即不以prefix开头时,就截断prefix最后一个字符,如此循环便可得。

class Solution {
    public String longestCommonPrefix(String[] strs) {
//函数`substring(int beginIndex, int endIndex)`:截取字符串的一部分,注意endIndex不取
//函数`startsWith(String str)`:判断某个字符串是否以str为开头
    if(strs.length == 0)  return "";
    String prefix = strs[0];        //prefix保存最长公共前缀,初始化为strs[0]
    // for(String temp:strs){      //增强型for循环
    for(int i=0;i<strs.length;i++){
        String temp=strs[i];       
        while(!temp.startsWith(prefix)){    //当temp与prefix不等即不以prefix开头时,
            prefix=prefix.substring(0,prefix.length()-1);   //就截断prefix最后一个字符
        }
    }
    return prefix;
    }
}

5.罗马数字转整数

思路:1.首先将组合的可能列出并添加到哈希表中;2.对字符串进行遍历,由于组合只有两种,一种是1个字符,一种是2个字符,其中2个字符优先于1个字符;3.先判断两个字符的组合在哈希表中是否存在,存在则将值取出加到结果 ans 中,并向后移2个字符。不存在则将判断当前1个字符是否存在,存在则将值取出加到结果 ans 中,并向后移1个字符;4.遍历结束返回结果 ans。

class Solution {
    public int romanToInt(String s) {
      HashMap<String, Integer> map = new HashMap<>();
        map.put("I", 1);
        map.put("IV", 4);
        map.put("V", 5);
        map.put("IX", 9);
        map.put("X", 10);
        map.put("XL", 40);
        map.put("L", 50);
        map.put("XC", 90);
        map.put("C", 100);
        map.put("CD", 400);
        map.put("D", 500);
        map.put("CM", 900);
        map.put("M", 1000);
        
        int ans = 0;
        for(int i = 0;i < s.length();) {
            if(i + 1 < s.length() && map.containsKey(s.substring(i, i+2))) {
                ans += map.get(s.substring(i, i+2));
                i += 2;
            } else {
                ans += map.get(s.substring(i, i+1));
                i ++;
            }
        }
        return ans;
    }
}

 

posted @ 2021-01-30 22:08  Xiarsu  阅读(64)  评论(0)    收藏  举报