IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 力扣刷题记录_数学(自学) -> 正文阅读

[数据结构与算法]力扣刷题记录_数学(自学)

1、计数质数(力扣204)

//1.暴力解法(超出时间限制)
    public static int countPrimes(int n) {
        int count = 0;
        for (int i = 2; i < n; i++) {
            if(isPrimes(i)){
                count ++;
            }
        }
        return count;
    }

    public static boolean isPrimes(int num){
        //如果说num=x*y,则在遍历过程中,x和y只需要利用一个就好
        //例如:6=2*3,遍历过2就不用遍历3了
        //因为x和y中的较小值必定在[2,根号下num]范围内,枚举[2,根号下num]即可
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0){
                return false;
            }
        }
        return true;
    }

//2.埃氏筛
    public static int countPrimes2(int n) {

        int[] isPrime = new int[n];
        Arrays.fill(isPrime,1);

        int count = 0;
        for (int i = 2; i < n; i++) {
            if (isPrime[i] == 1){
                count ++;
                //注意i * i的取值
                if ((long)i * i < n){
                    for (int j =  i * i; j < n; j+=i) {
                        isPrime[j] = 0;
                    }
                }
            }
        }
        return count;
    }

2、七进制数(力扣504)

//1.先%再/
    public String convertToBase7(int num) {
        if(num == 0) return "0";

        StringBuilder sb = new StringBuilder();
        int cur = num < 0 ? -num : num;
        while(cur > 0){
            sb.append(cur % 7);
            cur /= 7;
        }
        if(num < 0) sb.append("-");
        return sb.reverse().toString();
    }

3、数字转换为十六进制数(力扣405)

//1.利用进制转换规律
    /*
     * 使用无符号右移 >>>
     * */
    public static String toHex(int num) {

        StringBuilder sb = new StringBuilder();
        char[] arr = "0123456789abcdef".toCharArray();
        if (num ==0) return "0";
        while (num != 0){
            //计算num二进制的后四位表示的十进制数的大小
            int temp = num & 15;
            sb.append(arr[temp]);
            //二进制->16进制,每四位二进制转换为一位16进制
            num = num >>> 4;
        }
        return sb.reverse().toString();
    }

4、Excel表列名称(力扣168)

public String convertToTitle(int columnNumber) {
        StringBuilder sb = new StringBuilder();
            while(columnNumber > 0){
                int len = columnNumber % 26;
                //特别注意这一步,因为转换不是从0开始的
                if(len == 0){
                    len = 26;
                    columnNumber -=1;
                }
                sb.append((char)('A' + len - 1));
                columnNumber /= 26;
            }
            return sb.reverse().toString();
    }

//2.直接减1
    public static String convertToTitle(int columnNumber) {

        StringBuilder sb = new StringBuilder();
        while (columnNumber > 0){
            columnNumber --;
            sb.append((char)('A' + columnNumber % 26));
            columnNumber /= 26;
        }
        return sb.reverse().toString();
    }

5、阶乘后的零(力扣172)

//1.找规律
    /*
     * 找到规律,输入n,表示有n个数,每隔5个数出现一个5,
     * 每隔25个数出现2个5,每隔125个数出现3个5...
     * */
    public static int trailingZeroes(int n) {

        int count = 0;
        //先求间隔为5的5的数量,再加上间隔为25的数量,再加上...
        while (n >= 5){
            count += (n / 5);
            n /= 5;
        }
        return count;
    }

6、二进制求和(力扣67)

//1.位运算
    public static String addBinary(String a, String b) {

        int m = a.length() - 1, n = b.length() - 1;
        StringBuilder sb = new StringBuilder();

        int count = 0;
        //循环相加两个字符串相同长度的低位数部分
        while (m >= 0 && n >= 0) {
            int sum = count;
            sum += a.charAt(m--) - '0';
            sum += b.charAt(n--) - '0';
            //进位
            count = sum / 2;
            //当前位的值
            sb.append(sum % 2);
        }
        // 如果 a 还没遍历完成(a串比b串长),则继续遍历添加 a 的剩余部分
        while (m >= 0){
            int sum = count + a.charAt(m--) - '0';
            count = sum / 2;
            sb.append(sum % 2);
        }
        // 如果 b 还没遍历完成(b串比a串长),则继续遍历添加 b 的剩余部分
        while (n >= 0){
            int sum = count + b.charAt(n--) - '0';
            count = sum / 2;
            sb.append(sum % 2);
        }
        //如果count不等于0 还有个进位数没加进去,需要补充
        if (count == 1){
            sb.append(count);
        }
        //反转字符串获得正常结果
        return sb.reverse().toString();
    }

7、字符串相加(力扣415)

//1.思路很简单(只不过是十进制)
    public static String addStrings(String num1, String num2) {

        StringBuilder sb = new StringBuilder();
        int m = num1.length() - 1,n = num2.length() - 1;
        int count = 0;
        while (m >= 0 && n >= 0){
            int sum = count;
            sum += num1.charAt(m--) - '0';
            sum += num2.charAt(n--) - '0';
            count = sum / 10;
            sb.append(sum % 10);
        }

        while (m >= 0) {
            int sum = count + num1.charAt(m--) - '0';
            count = sum / 10;
            sb.append(sum % 10);
        }

        while (n >= 0) {
            int sum = count + num2.charAt(n--) - '0';
            count = sum / 10;
            sb.append(sum % 10);
        }

        if (count == 1){
            sb.append(1);
        }
        return sb.reverse().toString();
    }
//2. 1的简化版
    public static String addStrings2(String num1, String num2) {

        int m = num1.length() - 1,n = num2.length() - 1;
        StringBuilder sb = new StringBuilder();
        int count = 0;
        //只要满足以下条件,都可以计算
        while (m >= 0 || n >= 0 || count != 0){
            //注意下面这一步
            int sum1 = m >= 0 ? num1.charAt(m--) - '0': 0;
            int sum2 = n >= 0 ? num2.charAt(n--) - '0': 0;
            int sum = sum1 + sum2 + count;
            count = sum / 10;
            sb.append(sum % 10);
        }
        return sb.reverse().toString();
    }

8、最少移动次数使数组元素相等 II(力扣462)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:07:50  更:2022-04-18 18:11:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:40:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码