嵌套括号匹配问题/不使用比较运算求出两个数的最大值和最小值问题

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(i0
				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));
	}

}
嵌套括号匹配问题/不使用比较运算求出两个数的最大值和最小值问题_第1张图片

你可能感兴趣的:(刷题)