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

博客探讨了如何解决嵌套括号的匹配问题,同时提出了一种创新的方法,在不使用比较运算符的情况下找出两个数的最大值和最小值。通过深入分析和实例解析,揭示了解决这类问题的关键思路。
摘要由CSDN通过智能技术生成
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));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值