[每日两题系列]刷算法题咯~~

        本系列所选题目均来自力扣或者牛客网站. 所选题目主要是以其中的简单题为主, 中等题为辅, 包含少数困难题(原因是: 本人目前能力还不够~ ). 开展这个系列的目的是督促自己, 在暑假的时间里也要保持有一定的刷题量, 拒绝摆烂~
        话不多说, 直接开刷~~

各位相加

        题目描述: 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

解题思路:
        (1) 在力扣官网给出的题解中, 有一种是通过数学的思想来解题~ 代码量非常少~ 大概只有两三行的样子~~ 但是属于是那种比较难想到的, 有兴趣可以自己去研究研究… 本人的思路与解法中的第二种比较类似, 都是通过直接求解的方法.
        (2) 如若循环计算得到的数字小于10, 则直接返回这个值. 如若大于10, 则反复拆开每一位来进行相加得到一个新的值.

实现代码:

class Solution {
    public int addDigits(int num) {
        while(num>9){
            int sum=0;
            int n=num;
            while(n>0){
                int tmp=n%10;
                n/=10;
                sum+=tmp;
            }
            num=sum;
        }
        return num;
    }
}

猜数字大小

        题目描述: 猜数字游戏的规则如下:
        每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。
        如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。
        你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):
                -1:我选出的数字比你猜的数字小 pick < num
                1:我选出的数字比你猜的数字大 pick > num
                0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num
返回我选出的数字。

解题思路:
        (1) 类似这种猜数字的题目是很多的, 大致的思路都是通过二分的思想来实现的, 二分查找可以大大提高查找的效率.
        (2) 二分的代码应该都是很熟悉的, 这里不多说, 但是要注意一点: int mid=left+(right-left)/2; 这里这段代码就相当于 int mid=(left+right)/2 , 但是前面的写法又相比于后面的写法会更加严谨, 因为如果是left和right的值都是很大的, 那么left+right的结果很可能就会因为过大而发生截断, 从而使结果错误, 而前面一种写法就很好地避免了这种情况. 又或者可以再进一步写成 int mid=left+((right-left)>>>2) .

实现代码:

public class Solution extends GuessGame {
    public int guessNumber(int n) {
        int left=1;
        int right=n;
        while(left<right){
            int mid=left+(right-left)/2;
            if(guess(mid)<0){
                right=mid-1;
            }else if(guess(mid)>0){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return left;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
java程序设计》课程的题库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关任课教师出卷使用。 内容示例为: 9. 阅读下列程序片段,写出运行结果。 public class Test { public static void main(String[] args) { int percent = 10; tripleValue(percent); System.out.println(percent); } public static void tripleValue(int x) { x = 3 * x; } } 代码执行后输出的结果是______。 答案:10 [解析] static 关键字应用的场合有:①用来修饰类中定义的变量,这样的变量称为类变量或静态变量。②可以用来修饰类中定义的方法,这样的方法称为静态方法。③用来修饰初始化语句块,这样的语句块常称为静态初始化语句块。static 在这里表示这个方法为类方法,不属于任何对象实例,而是类所有,描述对象的共有动作,可以用类名直接调用。在调用了tripleValue函数之后,函数的值没有返回,所以percent的值还是10。 10. 阅读下列程序片段,写出运行结果。 class Shape { public Shape() { System.out.print("Shape"); } } class Circle extends Shape { public Circle() { System.out.print("Circle"); } } public class Test { public static void main(String[] args) { Shape d = new Circle(); } } 代码执行后输出的结果是______。 答案:ShapeCircle [解析] 继承是而向对象编程的一个主要优点之一,它对如何设计Java类有着直接的影响。继承有如下几点好处: ①它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其他类有什么不同即可,而且还可以动态访问其他有 关类中的信息。 ②通过继承,可以利用Java类库所提供的丰富而有用的类,这些类都已经被很好地实现。 ③当设计很大的程序时,继承可以使程序组织得层次清晰,有利于程序设计相减少错误的发生。该程序首先编写了一个Shape的类,然后又编写一个类Circle去继承Shape类。由于子类拥有父类所有的属性和方法,所以输出的是ShappeCircle。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡欣致

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值