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;
}
}