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