力扣_数学
Fizz Buzz
//循环判断1~n是否是3和5的倍数
class Solution {
public List<String> fizzBuzz(int n) {
//设置返回的字符串
List<String> str = new ArrayList<String>();
//循环判断1~n是否是3和5的倍数
for(int i = 1;i <= n;i++){
if((i % 3 == 0) && (i % 5 == 0)){
str.add("FizzBuzz");
}else if(i % 3 == 0){
str.add("Fizz");
}else if(i % 5 == 0){
str.add("Buzz");
}else{
str.add(Integer.toString(i));
}
}
return str;
}
}
计数质数
//超出时间限制
// //质数的判断是,如果有任意一个比其小的数大于等于2(2除外)能够做余数为0,那么这个数就不是质数
// class Solution {
// public int countPrimes(int n) {
// //记录有多少个质数
// int time = 1;
// if(n == 0 || n == 1 || n == 2){
// return 0;
// }
// for(int i = 3;i < n;i++){
// time++;
// for(int j = 2;j < i;j++){
// if(i % j == 0){
// time--;
// break;
// }
// }
// }
// return time;
// }
// }
//因为质子是某个数的倍数,2、3等肯定是最小倍的质数,那么它们的倍数一定都不是质数
//那么可以从前往后捋,将其设置成可以做余数的
class Solution {
public int countPrimes(int n) {
//消除特殊情况
if(n == 0 || n == 1 || n == 2){
return 0;
}
//设置数组用于判断是否为质数
int[] pd = new int[n+1];
//假设都为质数
Arrays.fill(pd,1);
//设质数的个数
int rev = 0;
for(int i = 2;i < n;i++){
if(pd[i] == 1){
++rev;
if((long)i*i < n){
for(int j = i * i;j < n;j = j+i){
pd[j] = 0;
}
}
}
}
return rev;
}
}
3的幂
//可以不断的除以三,判断最后的值是否为1,过程中也要判断是否能够除余3,不然Integer类型也会想其转化为整数
class Solution {
public boolean isPowerOfThree(int n) {
while(n != 0 && n % 3 == 0){
n = n/3;
}
return n == 1;
}
}
罗马数字转整数
class Solution {
//后面一个是对应的要取出的数据
Map<Character,Integer> value = new HashMap<Character,Integer>(){{
put('I',1);
put('V',5);
put('X',10);
put('L',50);
put('C',100);
put('D',500);
put('M',1000);
}};
public int romanToInt(String s) {
//求字符串的长度
int n = s.length();
//返回的总值
int rev = 0;
for(int i = 0;i < n;i++){
//用于取value图中的数据
int temp = value.get(s.charAt(i));
//最后一个数据不用判断,不然后出界
if(i < n-1 && temp < value.get(s.charAt(i+1))){
rev = rev - temp;
}else{
rev = rev + temp;
}
}
return rev;
}
}

浙公网安备 33010602011771号