中级农民
- 积分
- 112
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-11-13
- 最后登录
- 1970-1-1
|
第二题我写了下代码,就是第一遍先算所有乘除,第二遍算加减,楼主你说的iterative是这样吗?另外我不明白为什么规定每个数字只有一位,经过运算之后不就超过一位了吗?我没用到这个条件不知道对不对。忘楼主指点!
另外第一题求nlongn解法,完全没思路啊!- class Solution{
- public static int basicCalculator(String s){
- if(s==null||s.length()==0)
- return 0;
- int numOneStart, numOneEnd, numTwoStart, numTwoEnd;
- numOneStart = numOneEnd = numTwoStart = numTwoEnd = 0;
- while(numOneStart<s.length()){
- numOneEnd = numOneStart;
- while(numOneEnd<s.length()&&s.charAt(numOneEnd)>='0'&&s.charAt(numOneEnd)<='9') numOneEnd++;
- if(numOneEnd==s.length())
- break;
- char symbol = s.charAt(numOneEnd);
- if(symbol=='+'||symbol=='-'){
- numOneStart = numOneEnd+1;
- continue;
- }
- numTwoStart = numTwoEnd = numOneEnd+1;
- while(numTwoEnd<s.length()&&s.charAt(numTwoEnd)>='0'&&s.charAt(numTwoEnd)<='9') numTwoEnd++;
- int num1 = Integer.parseInt(s.substring(numOneStart, numOneEnd));
- int num2 = Integer.parseInt(s.substring(numTwoStart, numTwoEnd));
- int result = calculator(num1, num2, symbol);
- s = s.substring(0, numOneStart)+Integer.toString(result)+s.substring(numTwoEnd, s.length());
- }
-
- numOneStart = numOneEnd = numTwoStart = numTwoEnd = 0;
- while(numOneStart<s.length()){
- //System.out.println("bbb");
- numOneEnd = numOneStart;
- while(numOneEnd<s.length()&&s.charAt(numOneEnd)>='0'&&s.charAt(numOneEnd)<='9') numOneEnd++;
- if(numOneEnd==s.length())
- return Integer.parseInt(s.substring(numOneStart, numOneEnd));
- char symbol = s.charAt(numOneEnd);
- numTwoStart = numTwoEnd = numOneEnd+1;
- while(numTwoEnd<s.length()&&s.charAt(numTwoEnd)>='0'&&s.charAt(numTwoEnd)<='9') numTwoEnd++;
- int num1 = Integer.parseInt(s.substring(numOneStart, numOneEnd));
- int num2 = Integer.parseInt(s.substring(numTwoStart, numTwoEnd));
- int result = calculator(num1, num2, symbol);
- s = s.substring(0, numOneStart)+Integer.toString(result)+s.substring(numTwoEnd, s.length());
- }
- return 0;
- }
-
- private static int calculator(int num1, int num2, char symbol){
- switch (symbol){
- case '+':
- return num1+num2;
- case '-':
- return num1-num2;
- case '*':
- return num1*num2;
- case '/':
- if(num2==0)
- throw new IllegalArgumentException("Argument 'divisor' is 0");
- return num1/num2;
- }
- return 0;
- }
-
- public static void main(String[] argv){
- String input = "11+22*3/11/2";
- System.out.println(basicCalculator(input));
- }
- }
复制代码 |
|