【java】合法括号序列判断与Fibonacci数列

这篇具有很好参考价值的文章主要介绍了【java】合法括号序列判断与Fibonacci数列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

🔥编程题

1.合法括号序列判断

2.Fibonacci数列


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

🔥编程题

1.合法括号序列判断

链接:合法括号序列判断__牛客网 (nowcoder.com)

给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。

测试样例:

"(()())",6

返回:true

测试样例:

"()a()()",7

返回:false

测试样例:

"()(()()",7

返回:false

🔎思路分析:

第一种:

1️⃣如果是奇数,直接返回 false

2️⃣如果是偶数,遇到左括号count++,如果遇到右括号count--

如果第一个是右括号且右括号多于左括号(即 count <0),则不符合,返回 false

如果存在处括号外其他字符,返回 false

3️⃣如果左右括号相等且符合先左后右即(count=0),则返回 true

    public boolean chkParenthesis(String A, int n) {
        int count = 0;
        if (n % 2 == 1) {//奇数字符串
            return false;
        }
        for (int i = 0; i < n; i++) {
            char ch = A.charAt(i);
            if (ch == '(') {
                count++;
            } else if (ch == ')') {
                count--;
                if (count < 0) {
                    return false;
                }
            } else {
                return false;
            }
        }
        if (count == 0) {
            return true;
        } else {
            return false;
        }
    }

第二种:使用栈

1️⃣如果字符串长度不为偶数的时候,那么直接返回 false

2️⃣当长度为偶数,遍历字符串,遇到左括号入栈,遇到右括号,看栈顶元素是否为左括号;如果是,左括号出栈,继续遍历;当字符串遍历结束,如果栈为空,那么字符串就是一个合法的括号串,返回true

3️⃣如果遍历到一个非括号字符,直接返回 false

public boolean chkParenthesis(String A, int n) {
        if (n % 2 != 0) {//奇数
            return false;
        }
        Stack<Character> stack = new Stack();
        for (char ch : A.toCharArray()) {//遍历字符串
            if (ch == '(') {
                stack.push(ch);//入栈
            } else if (ch == ')') {
                //右括号先于左括号,不合法
                if (stack.isEmpty()) {//栈为空
                    return false;
                } else if (stack.peek() == '(') {//栈顶元素
                    stack.pop();//出栈
                }
            } else {//其他不合法
                return false;
            }
        }
        return stack.isEmpty();
    }

2.Fibonacci数列

描述:Fibonacci数列是这样定义的:F[0] = 0    F[1] = 1      for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入描述:输入为一个正整数N(1 ≤ N ≤ 1,000,000)

输出描述:输出一个最小的步数变为Fibonacci数"

示例1

输入:15

输出:2

🔎分析思路:

【java】合法括号序列判断与Fibonacci数列

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.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);
    }
}

 

 

 

 

 

到了这里,关于【java】合法括号序列判断与Fibonacci数列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

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

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

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

    2024年02月09日
    浏览(32)
  • 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日
    浏览(41)
  • ARM 汇编合法立即数判断

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

    2024年02月19日
    浏览(26)
  • 检测判断IP合法性API接口

    一款免费的帮助你检测判断IP合法性API接口 重要提示:建议使用https协议,当https协议无法使用时再尝试使用http协议 请求方式: POST 序号 参数 是否必须 说明 1 ip 是 需要检测的IP 2 appKey 是 唯一验证AppKey, 可前往官网“个人中心“获取(http(s): //luckycola.com.cn), 下面具体介绍获取方法

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

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

    2024年02月13日
    浏览(38)
  • 使用正则表达式判断日期字符串格式是否合法遇到的问题(解决)

    我们在使用SpringMVC从前端接受传递过来的日期数据时,默认传递过来的数据是String类型,如果我们从前端传递过来的数据格式是yyyy/MM/dd,SpringMVC有内置类型转化器会将String类型自动转化成Date类型。但如果我们从前端传递过来的数据格式是yyyy-MM-dd,SpringMVC的内置转化器就不能

    2024年02月08日
    浏览(32)
  • Python每日一练——第6天:判断有效括号

    给定一个只包括’(‘,’)‘, ‘{’, ‘\\\"’,’[‘,’]的字符串,判断字符串是否有效。有效字符串需满足: 1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 空字符串可被认为是有效字符串。 只有左右括号向对应才是有效 解法一:字符串替换法

    2024年02月16日
    浏览(26)
  • 【LeetCode】446. 等差数列划分II -- 子序列

    题目链接 我们要知道以某个位置为结尾的子序列的数量,可以通过它的以上一位置的为结尾的子序列的数量得知,也就是说,这是一个dp问题。 dp问题我们需要创建dp表,如果我们单纯使用dp[i]来表示以 i 位置为结尾的子序列的数量是完全不够的。因为我们不知道以 i-1 位置为

    2024年02月14日
    浏览(38)
  • 【动态规划】C++算法:446等差数列划分 II - 子序列

    视频算法专题 动态规划汇总 给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。 如果一个序列中 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该序列为等差序列。 例如,[1, 3, 5, 7, 9]、[7, 7, 7, 7] 和 [3, -1, -5, -9] 都是等差序列。 再例如,[1, 1, 2, 5, 7] 不是

    2024年02月03日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包