经典题目刷一刷

目录

 

字符串转换成整数

合法括号序列判断

字符串转换成整数

把字符串转换成整数_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&&tqId=11202&rp=6&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking

①题目示例:

②方法解析:

通过题意,我们知道我们要判断的情况为以下几个 方面:

a.首位是否为+/-的情况

b.字符串中是否有其他字符存在的情况

c.字符串本身不存在或为空的情况

同时,我们应该知道这样的公式:sum=sum*10+str.charAt(i)-'0';这样是可以在循环体中将字符串转换为数字的

 (不好理解的地方作出如下解释)

 注意!!!这里为啥借助数组而不能直接用字符串。是因为str.charAt(0)='0'的话是会报错的,因为在底层,它是一个被final修饰的数组,是不可更改进行重置的。所以我们将其转换成数组来进行求解

 代码:

public class Solution {
    public int StrToInt(String str) {
 char[]tmp=str.toCharArray();
        int flg=1;
        //当数组为空或者数组长度为0时,没有必要再向下,直接返回0
        if(tmp==null||tmp.length==0){
            return 0;
        }
        //如果第一个位置是+
        if(tmp[0]=='+'){
            flg=1;
            //同时将这个位置置为空
            tmp[0]='0';
        }
        //如果第一个位置是-
        if(tmp[0]=='-'){
            flg=-1;
            tmp[0]='0';
        }
        int sum=0;
        for(int i=0;i<tmp.length;i++){
         if(tmp[i]<'0'||tmp[i]>'9'){
             sum=0;
             break;
         }else{
             sum=sum*10+tmp[i]-'0';
         }
        }
        return sum*flg;
    }
}

合法括号序列判断

合法括号序列判断_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/d8acfa0619814b2d98f12c071aef20d4?tpId=8&&tqId=11039&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

①题目及示例:

②方法解析:

本题就是考虑栈的方法进行求解,对应的就出栈。具体可以参考数据结构Java版中栈里有一道极为类似的题目,这里就将讲解附在代码中了

import java.util.*;
public class Main1 {
    public  static boolean chkParenthesis(String A, int n) {
        // write code here
        if(n%2!=0){ return false; }
        Stack<Character>stack=new Stack<>();
        for(int i=0;i<n;i++){
            //当是'('时就入栈
            if(A.charAt(i)=='('){
                stack.push(A.charAt(i));
                //当是')'时就判断栈是否为空,若是栈为空,则表明数量不匹配,即匹配不了
                // 栈不为空的话,判断栈顶元素是否是'('
            }else if(A.charAt(i)==')'){
                if(stack.isEmpty()){
                    return false;
                }else //if(stack.peek()=='('),不用判断这一句,因为本来入栈的都是左括号,只要栈不为空,那么栈顶元素必然为'('
                     {
                    stack.pop();
                }
                //则表示输入的既不是左括号,也不是右括号
            }else{
                return false;
            }
        }
        return stack.isEmpty();
    }
    public static void main(String[] args) {
        String A="a()(())";
        int n=6;
        System.out.println(chkParenthesis(A, n));
    }
}

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张洋洋~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值