力扣_数学

Fizz Buzz

//循环判断1~n是否是3和5的倍数
class Solution {
    public List<StringfizzBuzz(int n) {
        //设置返回的字符串
        List<Stringstr = 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,Integervalue = 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;
    }
}
posted @ 2022-03-08 15:18  Space-guan  阅读(169)  评论(0)    收藏  举报