刷题笔记之四(Fibonacci数列+合法括号序列判断+跳石板+幸运的袋子+两种排序方式+最小公倍数)

这篇具有很好参考价值的文章主要介绍了刷题笔记之四(Fibonacci数列+合法括号序列判断+跳石板+幸运的袋子+两种排序方式+最小公倍数)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. Math类是封装了常用的数学运算

2. Object类的12种常用方法

3. Fibonacci数列

4. 合法括号序列判断

5. 子类父类trycatch调用

6. 跳石板

7. 幸运的袋子

8.跳出forEach循环break

9 .java为后缀的文件中,只能有一个public修饰并且文件名相同的类

10. a++先使用后++

11. 两种排序方式

12. 最小公倍数


1. Math类是封装了常用的数学运算

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

在Java中Math类封装了常用的数学运算,Math位于java.lang包。它的构造方法是private的,所以无法创建Math类的对象,并且Math类的所有方法都是类方法,可以直接通过类名来调用它们。

Math.abs(Type number) 取绝对值,返回值是传入的类型 Math.cell(double number) 返回值是double
Math.floor(double number) 向下取整,返回值是double Math.round(Type number) 四舍五入
Math.random() 取一个大于等于0.0,小于等于1.0的随机数 Math.max(Type x,Type y) 取最大值,返回值是double
Math.min(Type x,Type y) 取最小值,返回值是double Math.sqrt(double number) 计算平方根

2. Object类的12种常用方法

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

Object类是所有类的祖先,在jdk1.8中Object一共有12种方法

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 根据用途可以分为6种

1.构造函数

2.hashCode和equals函数用来判断对象是否相同

3.wait() , wait(long) , wait(long , int) , notify() , notifyAll() 主要在多线程中用

4.toString()和getClass都是返回对象,toString返回String对象,getClass返回class对象

5.clone()用来另存一个当前存在的对象

6.finalize()用于垃圾回收


3. Fibonacci数列

题目链接:Fibonacci数列_牛客题霸_牛客网 (nowcoder.com)

题目要求:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题目分析:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 上代码

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            int f1 = 0;
            int f2 = 1;

            while(f2 < n) {
                int f3 = f1 + f2;
                f1 = f2;
                f2 = f3;  
            }
            //循环结束 f1 < N <= f2
            int min = Math.min(n-f1,f2-n);
            System.out.println(min);
    }
}

4. 合法括号序列判断

题目链接:合法括号序列判断_牛客题霸_牛客网 (nowcoder.com)

题目要求:题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 题目分析:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 上代码

public boolean chkParenthesis(String A, int n) {
        if(A.length() % 2 != 0) {
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for (char c : A.toCharArray()) {
            if(c == '(') {
                stack.push(c);
            }else if(c == ')') {
                if(stack.isEmpty()) {
                    return false;
                }else {
                    stack.pop();
                }
            }else {
                return false;
            }
        }
       return stack.isEmpty();
    }

5. 子类父类trycatch调用

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

6. 跳石板

题目链接:跳石板_牛客题霸_牛客网 (nowcoder.com)

题目要求:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题目分析:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 上代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        int[] step = new int[m+1];
        for (int i = 0; i < m+1; i++) {
            step[i] = Integer.MAX_VALUE;
        }
        step[n] = 0;
        //开始跳,i代表当前石板的编号
        for (int i = n; i < m; i++) {
            if(step[i] == Integer.MAX_VALUE) {
                //无法跳跃到这个位置
                continue;
            }
            List<Integer> list = div(i);
            //j代表一次可以跳几块石板
            for (int j : list) {
                if(i+j <= m && step[i+j] != Integer.MAX_VALUE) {
                    //当前石板本身的次数 和 现在刚过来的次数进行比较
                    step[i+j] = Math.min(step[i+j],step[i]+1);
                }else if(i+j <= m) {
                    //当前石板上是默认的MAX,那刚跳过来就在上一次的基础上+1
                    step[i+j] = step[i]+1;
                }
            }
        }
        if(step[m] == Integer.MAX_VALUE) {
            //当前m上如果为MAX,说明就没有跳过来
            System.out.println(-1);
        }else {
            System.out.println(step[m]);
        }
    }
    //求i的约数
    private static List<Integer> div(int num) {
        List<Integer> list = new ArrayList<>();
        for (int i = 2; i*i <= num; i++) {
            if(num%i == 0) {
                list.add(i);
                //比如16的约数4,上面已经放了4下面就不能重复放
                //这里放大于i的约数
                if(num/i != i) {
                    list.add(num/i);
                }
            }
        }
        return list;
    }
}

7. 幸运的袋子

题目链接:幸运的袋子_牛客题霸_牛客网 (nowcoder.com)

题目要求:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题目分析:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

上代码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int m = scan.nextInt();
        int[] array = new int[m];
        for (int i = 0; i < m; i++) {
            array[i] = scan.nextInt();
        }
        Arrays.sort(array);
        System.out.println(count(array,m,0,0,1));
    }

    public static int count(int[] a, int n, int pos, int sum, int multi) {
        int count = 0;
        for (int i = pos; i < n; i++) {
            sum += a[i];
            multi *= a[i];
            if(sum > multi) {
                count = count + 1 + count(a,n,i+1,sum,multi);
            }else if(a[i] == 1) {
                count = count + count(a,n,i+1,sum,multi);
            }else {
                break;
            }
            sum = sum - a[i];
            multi = multi/a[i];
            //拥有相同号码的球是无区别的,判断下一个球和当前是否一样
            while(i < n-1 && a[i] == a[i+1]) {
                i++;
            }
        }
        return count;
    }
}

8.跳出forEach循环break

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

在方法中,返回值可能为int String boolean 等,而B,C中返回一个boolean类型的,可能不是当前方法所要的返回值

而想要跳出循环,break就可以了

9 .java为后缀的文件中,只能有一个public修饰并且文件名相同的类

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 以.java为后缀的文件中,可以包含多个类,但只能有一个public修饰并且文件名相同的类


10. a++先使用后++

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java


11. 两种排序方式

题目链接:两种排序方法_牛客题霸_牛客网 (nowcoder.com)

题目要求:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

 题目分析:

这道题是两种排序方式:按照字典顺序排列单词;按照单词长度排列单词

综合根据两种排序方式,输出对应语句

所以可以考虑将两张排序方式,单独写两个方法

isSortZidian():如果给方法中传的参数是字符串数组的话,那么比较时直接在循环里用comparTo()比较两个单词就可以

isSortLength():如果给方法中传的参数是字符串数组的话,那么比较时直接在循环里比较两个字符串的长度就可以了

所以我们最好在前面输入时,将输入的每一行字符放进字符串数组中去

也就是每一行读取,放入字符串数组中,这里可以考虑使用BufferedReader

BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中。

主要是因为BufferedReader中有一个方法readLine(),使用起来特别方便,每次读回来的都是一行,但System.in本身表示的是InputSteam(字节流),现在要求接收的是一个字符流,这里就需要将字节流转为字符流就可以了用InputStreamReader

  BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));

上代码

import java.util.Scanner;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
        //每次读一行 readLine
        int n = Integer.parseInt(bi.readLine());
        String[] str = new String[n];
        for(int i = 0; i < n; i++) {
            str[i] = bi.readLine();
        }
        //判断
         if(isSortZidian(str) && !isSortLength(str)) {
            System.out.println("lexicographically");
        }else if(!isSortZidian(str) && isSortLength(str)) {
            System.out.println("lengths");
        }else if(isSortZidian(str) && isSortLength(str)) {
            System.out.println("both");
        }else {
            System.out.println("none");
        }
    }

    private static boolean isSortZidian(String[] str) {
        for(int i = 0; i < str.length-1; i++) {
            if(str[i].compareTo(str[i+1]) > 0) {
                return false;
            }
        }
        return true;
    } 
     private static boolean isSortLength(String[] str) {
        for (int i = 0; i < str.length-1; i++) {
            if(str[i].length() > str[i+1].length()) {
                return false;
            }
        }
        return true;
    }
}

12. 最小公倍数

题目链接:求最小公倍数_牛客题霸_牛客网 (nowcoder.com)

题目要求:

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

题目分析:

 AB最小公倍数 = A*B / (AB最大公约数)

AB最大公约数用辗转相除法

记住这个公式,下次写辗转相除法照着这个写 gcd(a,b)=gcd(b,a%b) 

还是感觉递归的这个对照这个公式好写

题四小笔记 sainn,刷题笔记,算法,开发语言,1024程序员节,数据结构,java

上代码

import java.util.Locale;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        System.out.println(n*m/gcd(n,m));
    }

    //辗转相除法求最大公约数
    private static int gcd(int a, int b ) {
        if(b == 0){
            return a;
        }
        int r = a%b;
        return gcd(b,r);
    }
}

 文章来源地址https://www.toymoban.com/news/detail-834165.html

到了这里,关于刷题笔记之四(Fibonacci数列+合法括号序列判断+跳石板+幸运的袋子+两种排序方式+最小公倍数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【刷题笔记8.10】LeetCode题目:有效括号

    给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号 首先,解决此题,我们要明确使用 栈

    2024年02月13日
    浏览(29)
  • 蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 点击跳转=蓝桥系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、

    2024年02月11日
    浏览(41)
  • 【代码随想录刷题记录】 392.判断子序列 、 115.不同的子序列

    1、题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,\\\"ace\\\"是\\\"abcde\\\"的一个子序列,而\\\"aec\\\"不是)。 题目链接:https://leetcode.cn/problems/is-subsequence/ 2、代码

    2024年02月16日
    浏览(41)
  • 【C刷题】矩阵相等判断与序列中删除指定的数字

    目录 BC105-矩阵相等判断 方法1:两矩阵输入完毕后,进行比较 方法2:在接收过程中直接比较 BC98 - 序列中删除指定的数字 方法1:把要删除的元素改为0 方法2:打印不用删除的元素 方法3:定义两个下标 i 和 j(动图演示) 此篇文章是关于牛客网刷题的做题思路和代码分享,感谢来访与

    2024年02月15日
    浏览(32)
  • 代码随想录刷题第55天|Leetcode392判断子序列、Leetcode115不同的子序列

    1、Leetcode392判断子序列 题目链接:392判断子序列 本题与1143最长公共子序列 有一点不一样,最长公共子序列求 两个字符串 的最长公共子序列的长度,本题判断s是否为t的子序列。即t的长度是大于等于s的。 1、确定dp数组及下标含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以

    2024年02月16日
    浏览(41)
  • 使用栈检查括号的合法性 C 实现

    使用栈检查括号的合法性 思路讲解:首先从数组数组0下标开始,如果是左括号直接无脑 压入栈 ,直到出现右括号开始判断合法与否。遇到右括号分两种情况, 第一种 是空栈的情况,也就是说我们第一个字符就是右括号,那么我们可以直接判定为非法,返回false退出; 第二

    2024年02月09日
    浏览(44)
  • 代碼隨想錄算法訓練營|第五十六天|392.判断子序列、1035.不相交的线、115.不同的子序列。刷题心得(c++)

    目录 讀題 392.判断子序列 自己看到题目的第一想法 看完代码随想录之后的想法 115.不同的子序列 看完代码随想录之后的想法 392.判断子序列 - 實作 思路 原始思路 代碼隨想錄思路 Code 原始思路 代碼隨想錄思路 115.不同的子序列 - 實作 思路 Code 總結 自己实现过程中遇到哪些困

    2024年02月06日
    浏览(36)
  • js判断日期是否合法

    function isDateValid(year, month, day) {   // 创建一个Date对象,将年、月、日作为参数传入   // 注意:在JavaScript中,月份是从0开始的,所以实际月份要减1   var date = new Date(year, month - 1, day);      // 使用getFullYear()、getMonth()和getDate()方法获取日期对象的年、月、日   var validYear = dat

    2024年02月11日
    浏览(49)
  • ARM 汇编合法立即数判断

    在ARM指令集中,一条汇编指令编码成32bits后,将不同的位数划分成不同的功能区间,比如 条件码 和 操作码 ,还有比特位要留给指令本身和寄存器使用, 通常情况下只有12-bits的长度可以用来表示立即数(immediate)。 12bits 可以表示的无符号数范围为: 0~4095 ,有符号数的范围

    2024年02月19日
    浏览(33)
  • C#判断输入的IP地址是否合法

    代码中链接java后端时,要从界面中的输入框读取输入的ip地址,而ip地址尤其特定的格式,因此编写函数判断输入的ip地址是否格式正确,如果格式正确,则返回true;如果格式错误,则返回false。代码如下:

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包