数学相关算法题

169 阅读1分钟

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

求平方根

给出一个数求该数的平方根,要求不使用库函数

思路

1.二分查找,以0和x作为左右边界进行划分

2.关键判断

if(mid<=x/mid&&(mid+1)>x/(mid+1)) {

class Solution {
    public int mySqrt(int x) {
     if(x<=1) return x;
      //int  a = x/2;
      int left = 0;
      int right = x;
      while(left<=right){
         int  mid = left+((right-left)>>1);
         if(mid==0) return 0;
         if(mid<=x/mid&&(mid+1)>x/(mid+1)) {
             return mid;
         }else if(x/mid<mid){
             right=mid;
         }else{
             left=mid+1;
         }
      }
      return 0;
    }
}

\

提升——精确到0.000001位

关键判断

Math.abs(mid - x / mid) < 0.000001

package com.improve;

import java.text.DecimalFormat;

public class Code02_MySqrt {

    public static void main(String[] args) {
        Code02_MySqrt code = new Code02_MySqrt();
        DecimalFormat decimalFormat = new DecimalFormat("0.000000");
        String format = decimalFormat.format(code.mySqrt(19));
        System.out.println(format);

    }

    public double mySqrt(int x) {
        double left = 0;
        double right = x;
        while (left <= right) {
            double mid = left + ((right - left) / 2);
            if (x / mid <= mid && (mid + 1) > x / (mid + 1) && Math.abs(mid - x / mid) < 0.000001) {
                //找到位置
                return mid;
            } else if (x / mid > mid) {
                left = mid;
            } else {
                right = mid;
            }
        }
        return 0;

    }
}

字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

来源:力扣(LeetCode)

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134" 示例 2:

输入:num1 = "456", num2 = "77"
输出:"533" 示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"  

class Solution {
    public String addStrings(String num1, String num2) {
          char[] chars1 = num1.toCharArray();
          char[] chars2 = num2.toCharArray();
          int p1 = chars1.length -1;
          int p2 = chars2.length - 1;
          int pre =0 ;
          StringBuilder sb = new StringBuilder();
          while(p1>=0||p2>=0){
              int t1 = p1>=0?chars1[p1--]-'0':0;
              int t2 = p2>=0?chars2[p2--]-'0':0;
              int t = t1 + t2 + pre;
              sb.append(String.valueOf(t%10));
              pre = t/10;
          }
          if(pre!=0) sb.append(pre);
          return sb.reverse().toString();
    }
}

3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

class Solution {
    public boolean isPowerOfThree(int n) {
        while(n>=3){
            if(n%3!=0) return false;
            n=n/3;
        }
        return n==1;
    }
}