Leetcode junior math

再写几道吧。。。

1、Fizz Buzz

(1). 传送门

传送门:Fizz Buzz

(2).结果

超过99.70%

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string> v;
for(int i = 1;i <= n;i++) {
if(i%15 == 0) {
v.push_back("FizzBuzz");
}
else {
if(i%3 == 0 || i%5 == 0) {
if(i%3 == 0) {
v.push_back("Fizz");
}
else {
v.push_back("Buzz");
}
}
else {
v.push_back(to_string(i));
}
}
}
return v;
}
};

2、计数质数

(1).传送门

传送门:计数质数

(2).结果

超过83.37%

使用线性筛法

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
int countPrimes(int n) {
bool number[n+1];
int prime[n+1];
int i,j,count = 0,p = 0;
memset(number,0,sizeof number);
for(i = 2;i <= n;i++) {
if(!number[i])
prime[count++] = i;
for(j = 0;j < count;j++) {
if(i*prime[j] > n) break;
number[i*prime[j]] = true;
if(i%prime[j] == 0) break;
}
}
for(int i = 2;i < n;i++)
if(!number[i]) {
// printf("%d\n",i);
p++;
}
return p;
}
};

3、3的幂

(1).传送门

传送门:3的幂

(2).结果

超过85.08%

注意负数

进阶:
你能不使用循环或者递归来完成本题吗?

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
bool isPowerOfThree(int n) {
if(n <= 0)
return false;
while(n>1) {
if(n%3)
return false;
n /= 3;
}
return true;
}
};

4、罗马数字转整数

(1).传送门

传送门:罗马数字转整数

(2).结果

超过81.02%

代码写的有点丑

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Solution {
public:
int romanToInt(string s) {
map<char,int> m;
m['I'] = 1; m['V'] = 5; m['X'] = 10;
m['L'] = 50;m['C'] = 100;m['D'] = 500;m['M'] = 1000;
int p = 0;
int flag = 1;
int si = s.size();
for(int i = 0;i < si;i++) {
if(i == si-1)
p += m[s[i]];
else
{
int j = i;
if(m[s[i]] > m[s[i+1]]) {
p += m[s[i]];
}
else {
if(m[s[i]] == m[s[i+1]]) {
while(m[s[j]] == m[s[j+1]]){
flag++;
j++;
}
i = i+flag-1;
p += flag*m[s[j]];
flag = 1;
}
else {
p += m[s[i+1]];
p -= m[s[i]];
i++;
}
}
}
}
return p;
}
};