package com.duoduo.day329;
/**
* 如何消除嵌套的括号 并判断正确性
* @author 多多
*
*/
public class Testchange_str {
public static void main(String [] args) {
String s="(1,(2,3),(4,(5,6),7))";
String result=changeStr(s);
if(result!=null)
System.out.println(result);
String s2="((1,3,),(4,5)";
String result1=changeStr(s2);
if(result1!=null)
System.out.println(result1);
}
private static String changeStr(String s) {
String result="(";
char[] c=s.toCharArray();
int count=0; //括号个数
int i=0; //遍历指针
while(i<c.length) {
if(c[i]=='(') { //有左括号 就加1
count++;
}else if(c[i]==')') { //右括号 -1 但是需要判断是否>0
if(count>0)
count--;
else {
System.out.println("expression wrong!");
return null;
}
}else if(c[i]==',') { //逗号 这里就正常赋值 并结束本次循环 无需返回值 处于中间位置
result+=c[i++];
continue;
}else if(c[i]>='0' && c[i]<='9') //正常数字赋值
result+=c[i];
else {
System.out.println("expression wrong!");
return null;
}
i++; //记得让i++
}
if(count>0) { //最终循环结束 判断括号的匹配情况
System.out.println("expression wrong!");
return null;
}
result+=")";
return result;
}
}
package com.duoduo.day329;
/**
* 无需比较大小即求得最大值和最小值
* Max(a,b)=(a+b+|a-b|)/2 ; Min(a,b)=(a+b-|a-b|)/2;
* 存在问题:a,b特别 大时容易数据溢出。 解决:将a,b变成长整型
* @author 多多
*
*/
import java.math.*;
public class TestmaxMin {
public static int max(int a,int b) {
return (int) ((long)a +(long)b + Math.abs((long)a-(long)b ))/2;
}
public static int min(int a,int b) {
return (int) ((long)a +(long)b - Math.abs((long)a-(long)b ))/2;
}
public static void main(String [] args) {
System.out.println("max(3,5)="+max(3,5));
System.out.println("min(3,5)="+min(3,5));
}
}