• 力扣刷题篇之数与位3


    系列文章目录


    目录

    系列文章目录

    前言

    数学问题

    总结


    前言

     本系列是个人力扣刷题汇总,本文是数与位。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode)


    数学问题

    204. 计数质数 - 力扣(LeetCode)

    通过遍历从2开始到 n 的平方根,将每个质数的倍数标记为非质数,最终统计未被标记为非质数的数的个数。 

    1. class Solution {
    2. public int countPrimes(int n) {
    3. if (n <= 1) {
    4. return 0; // 小于等于1的情况下没有质数
    5. }
    6. // 创建一个布尔数组,用于标记是否是质数,初始化都为 true
    7. boolean[] notPrime = new boolean[n];
    8. notPrime[0] = notPrime[1] = true; // 0和1不是质数
    9. // 使用埃拉托斯特尼筛法,从2开始遍历到sqrt(n)
    10. for (int i = 2; i < Math.sqrt(n); i++) {
    11. if (!notPrime[i]) {
    12. // 如果当前数是质数,则将其倍数标记为非质数
    13. for (int j = 2; j * i < n; j++) {
    14. notPrime[i * j] = true;
    15. }
    16. }
    17. }
    18. // 统计未被标记为非质数的数的个数
    19. int count = 0;
    20. for (int i = 2; i < notPrime.length; i++) {
    21. if (!notPrime[i]) {
    22. count++;
    23. }
    24. }
    25. return count;
    26. }
    27. }

    263. 丑数 - 力扣(LeetCode)

     通过循环除以质因子 2、3、5 来判断是否是丑数。如果最终 n 等于 1,说明原始数字只包含质因子 2、3 和/或 5,即是丑数。

    1. class Solution {
    2. public boolean isUgly(int n) {
    3. if(n<=0){
    4. return false;
    5. }
    6. while(n%2==0){
    7. n/=2;
    8. }
    9. while(n%3==0){
    10. n/=3;
    11. }
    12. while (n%5==0){
    13. n/=5;
    14. }
    15. return n==1;
    16. }
    17. }

    367. 有效的完全平方数 - 力扣(LeetCode)

    使用二分查找的思想,将范围划分为 [1, num],在每一步中找到中点 mid,然后判断 mid 的平方是否等于 num。如果是,则判断 num 是否能被 mid 整除;如果 mid 的平方小于 num,则更新搜索范围为 [mid+1, high];如果 mid 的平方大于 num,则更新搜索范围为 [low, mid-1]。最终如果找到一个平方等于 num 的数,则返回 true,否则返回 false。 

    1. class Solution {
    2. public boolean isPerfectSquare(int num) {
    3. int low = 1;
    4. int high = num;
    5. // 使用二分查找
    6. while (low <= high) {
    7. int mid = low + (high - low) / 2;
    8. int t = num / mid;
    9. // 如果 mid 的平方等于 num,判断 num 是否能被 mid 整除
    10. if (t == mid) {
    11. if (num % mid == 0) {
    12. return true;
    13. }
    14. low = mid + 1;
    15. } else if (t < mid) {
    16. high = mid - 1;
    17. } else {
    18. low = mid + 1;
    19. }
    20. }
    21. return false;
    22. }
    23. }

    1071. 字符串的最大公因子 - 力扣(LeetCode)

    使用递归的思想。它检查两个字符串的长度,如果相等,则判断是否相等,如果不相等,则递归调用自身,去掉较长字符串的前缀部分,直到两个字符串相等或某一个为空。最终返回最大公约字符串。 

    1. class Solution {
    2. public String gcdOfStrings(String str1, String str2) {
    3. // 如果其中一个字符串为空,则返回另一个字符串
    4. if ("".equals(str1)) {
    5. return str2;
    6. }
    7. if ("".equals(str2)) {
    8. return str1;
    9. }
    10. // 如果两个字符串长度相等,返回它们本身或空字符串
    11. if (str1.length() == str2.length()) {
    12. return str1.equals(str2) ? str1 : "";
    13. } else if (str1.length() < str2.length()) {
    14. // 如果 str1 的长度小于 str2,判断 str1 是否为 str2 的前缀
    15. if (!str1.equals(str2.substring(0, str1.length()))) {
    16. return "";
    17. }
    18. // 递归调用 gcdOfStrings,去掉 str1 部分
    19. return gcdOfStrings(str1, str2.substring(str1.length()));
    20. } else {
    21. // 如果 str2 的长度小于 str1,判断 str2 是否为 str1 的前缀
    22. if (!str2.equals(str1.substring(0, str2.length()))) {
    23. return "";
    24. }
    25. // 递归调用 gcdOfStrings,去掉 str2 部分
    26. return gcdOfStrings(str2, str1.substring(str2.length()));
    27. }
    28. }
    29. }


    总结

    数与位收尾了,有点东西,之前那个进制转换还有点需要掌握下多种方法,其他倒是都很简单,多敲!

  • 相关阅读:
    ETCD数据库源码分析——gRPC 拦截器
    YGG 与教育平台 Nas Academy 合作,建立 Web3 元宇宙大学
    【数据库】SQL 检索数据
    【开箱即用】开发了一个基于环信IM聊天室的Vue3插件,从而快速实现仿直播间聊天窗功能
    Bundle结构入门
    java基于ssm的在线IT项目任务管理系统
    Deep Graph-level Anomaly Detection by Glocal Knowledge Distillation
    VR禁毒教育 | 毒品认知VR虚拟仿真科普:提高青少年抵制毒品的意识和能力
    程序员的“护城河”
    【大话设计模式】开放-封闭原则
  • 原文地址:https://blog.csdn.net/m0_66076989/article/details/134431786