33.题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路:丑数是由2,3,5任意乘得到的,质因数只能是2,3,5.所以构建数组,存储最小组合数
data[0]=1
1*2,1*3,1*5 选最小的 2,然后2对应指向data[1]
data[]=[1,2]
2*2,1*3,1*5 选最小的3,然后3对应指向data[1]
data[]=[1,2,3]……
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<7)
return index;
vector<int>data(index);
data[0]=1;
int t2=0,t3=0,t5=0;
for(int i=1;i<index;++i)
{
data[i]=(min(data[t2]*2,min(data[t3]*3,data[t5]*5)));
if(data[i]==data[t2]*2) ++t2;
if(data[i]==data[t3]*3) ++t3;
if(data[i]==data[t5]*5) ++t5;
}
return data.back();
}
};
# -*- coding:utf-8 -*-
class Solution:
def GetUglyNumber_Solution(self, index):
if index<7:
return index
data=[1]
t2=t3=t5=0
for i in range(1,index):
data.append(min(data[t2]*2,min(data[t3]*3,data[t5]*5)))
if data[i]==data[t2]*2:
t2+=1
if data[i]==data[t3]*3:
t3+=1
if data[i]==data[t5]*5:
t5+=1
return data[-1]
34.题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.empty())
return -1;
map<char,int>data;
for(auto i : str)
++data[i];
for(int i=0;i<str.size();++i)
if(data[str[i]]==1)
return i;
return -1;
}
};
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.empty())
return -1;
char hashtable[256]={0};
for(auto i:str)
++hashtable[i];
for(int i=0;i<str.size();++i)
if(hashtable[str[i]]==1)
return i;
return -1;
}
};
# -*- coding:utf-8 -*-
class Solution:
def FirstNotRepeatingChar(self, s):
for i in range(len(s)):
if s.count(s[i])==1:
return i
return -1
# write code here