刷题日常day2

第一题:最大括号深度

题目描述

现有一字符串仅由 ‘(‘,’)’,‘{‘,’}’,’[‘,’]’六种括号组成。

若字符串满足以下条件之一,则为无效字符串:

①任一类型的左右括号数量不相等;

②存在未按正确顺序(先左后右)闭合的括号。

输出括号的最大嵌套深度,若字符串无效则输出0。

0≤字符串长度≤100000

输入

一个只包括 ‘(‘,’)’,‘{‘,’}’,’[‘,’]’的字符串

输出

一个整数,最大的括号深度

样例输入

[]

样例输出

1

代码:

import java.util.Scanner;
import java.util.Stack;

public class nA {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        int maxDepth = getMaxDepth(input);
        System.out.println(maxDepth);
    }

    public static int getMaxDepth(String input) {
        Stack<Integer> stack = new Stack<>();
        int maxDepth = 0;
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c == '(' || c == '{' || c == '[') {
                stack.push(i);
            } else if (c == ')' || c == '}' || c == ']') {
                if (stack.isEmpty()) {
                    return 0;
                }
                char topChar = input.charAt(stack.peek());
                if ((c == ')' && topChar == '(') || (c == '}' && topChar == '{') || (c == ']' && topChar == '[')) {
                    stack.pop();
                    maxDepth = Math.max(maxDepth, stack.size() + 1);
                } else {
                    return 0;
                }
            }
        }
        if (!stack.isEmpty()) {
            return 0;
        }
        return maxDepth;
    }
}

第二题:整数编码

题目描述

实现一个整数编码方法

使得待编码的数字越小

编码后所占用的字节数越小

编码规则如下

1.编码时7位一组,每个字节的低7位用于存储待编码数字的补码

2.字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节, 置0表示当前字节为最后一个字节

3.采用小端序编码,低位和低字节放在低地址上

4.编码结果按16进制数的字符格式进行输出,小写字母需要转化为大写字母

输入

输入的为一个字符串表示的非负整数

输出

输出一个字符串表示整数编码的16进制码流

样例输入

0

样例输出

00

第三题:素数之积

题目描述

RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高。

给定一个32位正整数,请对其进行因数分解,找出是哪两个素数的乘积。

输入

一个正整数num

0 < num <= 2147483647

输出

如果成功找到,以单个空格分割,从小到大输出两个素数,分解失败,请输出-1 -1。

样例输入

15

样例输出

3 5

代码实现

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

public class nF {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int num = scanner.nextInt();
        List<Integer> factors = factorize(num);
        if (factors.size() == 2) {
            System.out.println(factors.get(0) + " " + factors.get(1));
        } else {
            System.out.println("-1 -1");
        }
    }

    public static List<Integer> factorize(int num) {
        List<Integer> factors = new ArrayList<>();
        for (int i = 2; i <= Math.sqrt(num); i++) {
            while (num % i == 0) {
                factors.add(i);
                num /= i;
            }
        }
        if (num > 1) {
            factors.add(num);
        }
        return factors;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值