目录
字符串转换成整数
①题目示例:
②方法解析:
通过题意,我们知道我们要判断的情况为以下几个 方面:
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; } }
合法括号序列判断
①题目及示例:
②方法解析:
本题就是考虑栈的方法进行求解,对应的就出栈。具体可以参考数据结构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)); } }