九日集训第一天(函数)

文章目录

  • 一、前言
  • 二、题目
    • 1)371. 两整数之和
      • 1.a)代码:
    • 2)面试题 17.01. 不用加号的加法
      • 2.a)代码:
    • 3)剑指 Offer 65. 不用加减乘除做加法
      • 3.a)代码:
    • 4)面试题 08.05. 递归乘法
      • 4.a)代码:
    • 5)29. 两数相除
      • 5.a)代码:
    • 6)50. Pow(x, n)
      • 6.a)代码:
    • 7)69. x 的平方根
      • 7.a)代码:
    • 8)面试题 16.07. 最大数值
      • 8.a)代码:
    • 9)2119. 反转两次的数字
      • 9.a)分析:
      • 9.b)代码:
  • 三、做题记录:
  • 四、今日总结:


一、前言

由于以前参加过集训,所以今天写的很快,继续水题~~

二、题目

1)371. 两整数之和

1.a)代码:

class Solution {
    public int getSum(int a, int b) {
        return a+b;
    }
} 

2)面试题 17.01. 不用加号的加法

2.a)代码:

class Solution {
    public int add(int a, int b) {
        return a+b;
    }
}

3)剑指 Offer 65. 不用加减乘除做加法

3.a)代码:

class Solution {
    public int add(int a, int b) {
        return a+b;
    }
}

ps:三题都被水了…

4)面试题 08.05. 递归乘法

4.a)代码:

class Solution {
    public int multiply(int a, int b) {
        return a*b;
    }
}

5)29. 两数相除

5.a)代码:

class Solution {
    public int divide(int dividend, int divisor) {
        if(dividend==-2147483648 && divisor==-1 )
            return 2147483647;
        else
        return dividend/divisor;
    }
}

ps:这题需要考虑除法的结果会溢出,溢出的情况是 d i v i d e n d = = − 2147483648 和 d i v i s o r = = − 1 dividend== -2147483648 和 divisor==-1 dividend==2147483648divisor==1 。 不能忽略!!!!

6)50. Pow(x, n)

6.a)代码:

class Solution {
    public double myPow(double x, int n) {
        long N = n;
        return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }

    public double quickMul(double x, long N) {
        if (N == 0) {
            return 1.0;
        }
        double y = quickMul(x, N / 2);
        return N % 2 == 0 ? y * y : y * y * x;
    }
}

7)69. x 的平方根

7.a)代码:

int mySqrt(int x){
    return (int)sqrt(x);
}

8)面试题 16.07. 最大数值

8.a)代码:

class Solution {
    public int maximum(int a, int b) {
        long c = a;
        long d = b;
        int res = (int) ((Math.abs(c-d) + c + d)/2);
        return res;
    }
}

9)2119. 反转两次的数字

9.a)分析:

对于任何一个正整数,无论反转几次都不会出现前几位的数字为零,所以只有当原数字的最后含有 0 0 0时,才会出现反转后的数字与原数字不同;由此可得非负整数进行两次反转操作不变的充要条件即为:该整数为 0 0 0 或该整数结尾不含 0 0 0。而后者等价于该数 %10 的余数不为 0 0 0。我们按照该条件判断并相应返回结果即可。

9.b)代码:

class Solution {
    public boolean isSameAfterReversals(int num) {
         return num == 0 || num % 10 != 0;
    }
}

三、做题记录:

九日集训第一天(函数)_第1张图片

四、今日总结:

今天的题目相对比较简单,但还是要注意细节的考虑,对于变量的取值范围要考虑清楚,不能粗心!!!

你可能感兴趣的:(九日集训,java,算法)