劍指offer-20200313

20200313

題目 :醜數

我們把只包含因子2、3和5的數稱爲醜數。按從小到大的順序的第n個醜數。

示例:

輸入: n = 10
輸出: 12
解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。

思路 :動態規劃;需將前面的求得的醜數記錄下來。後面的值等於前面的*2或*3或*5。

code

class Solution{
    public int nthUglyNumber(int n){
        int p2 = 0, p3 = 0, p5 = 0;
        int[] dp = new int[n];
        dp[0] = 1;//初始值
        for(int i=1;i<n;i++){
            //確保醜數從小到大排序。
            dp[i] = Math.min(dp[p2]*2,Math.min(dp[p3]*3,dp[p5]*5));
            if(dp[i]==dp[p2]*2) p2++;
            if(dp[i]==dp[p3]*3) p3++;
            if(dp[i]==dp[p5]*5) p5++;
        }
        return dp[n-1];
    }
}

題目 :第一個只出現一次的字符。如果沒有,返回一個單空格。

在字符串 s 中找出第一個只出現一次的字符。如果沒有,返回一個單空格。

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

思路:利用哈希表,首先遍歷,得到每個字符出現的次數,之後再次遍歷,找出最先出現一次的字符。

class Solution{
    public char firstUniqChar(String s){
        char ans = ' ';
        //hashMap<Character,Integer>
        Map<Character,Integer> map = new HashMap<>();
        for(int i=0;i<s.length();i++){
            if(map.containsKey(s.charAt(i))){
                int count = map.get(s.charAt(i)) + 1;
                map.put(s.charAt(i),count);
            }else{
                map.put(s.charAt(i),1)
            }
        }
        //再次遍歷字符串,找到第一個出現次數爲1的返回
        for(int i=0;i<s.length();i++){
            if(map.get(s.charAt(i)) == 1){
                return s.charAt(i);
            }
        }
        return ans;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章