这两天总是在琢磨这个java题,看起来比较简单,而且看起来好像比较轻松,并且引诱着一些方案的可能性,给人的直观好像简单了一些,实际上却不是这样,很喜欢这种题目。说说我想解决的办法吧,我想解释成一个树的解构。
比如:1+2*4/2+6
+
/ \
+ 6
/ \
1 /
/ \
* 2
/ \
2 4
这样的一个树的解构,这样做的时候,只需要左节点操作符右节点就可以了,这样也是一个递归就可以。 当我真正的实现一个数的时候,却发现做出来这样一个树并不是那么简单,添加一个节点非大即小,或者相等,数字不可能那么平衡的分到两端去,当然了,做一个特殊的树完全可以的,可是总觉得不是很完美。
第二个解决方案想的是用一个组合模式Leaf节点就是个个数字,组合呢,就是Leaf+操作符+Leaf做一个基本组合,大的就是Composite + 操作符+Composite。这样就是还是一个递归了。调用一个getValue就可以了,Leaf返回的就是Value数字,结点返回的就是Composite + 操作符+Composite。就这样就可以了。可是做来作去的,发现还不是一个完美的组合模式,也是一个特殊的组合。
自己的一些事例代码,没有什么实际意义
public interface IComposite {
public int getValue();
public void addLeft(IComposite leaf);
public boolean isLeaf();
public void addRight(IComposite leaf);
}
public class Composite implements IComposite{
private IComposite left;
private IComposite right;
private String operator;
public Composite(IComposite va, IComposite vb, String operator) {
super();
this.left = va;
this.right = vb;
this.operator = operator;
}
public int getValue() {
if (operator.equals("+")) {
return left.getValue() + right.getValue();
}
if (operator.equals("*")) {
return left.getValue() * right.getValue();
}
if (operator.equals("/")) {
return left.getValue() / right.getValue();
}
if (operator.equals("-")) {
return left.getValue()- right.getValue();
}
return 0;
}
}
这两个解决方案是我最直观的解决方法,最后却都放弃了,只是用了递归解决的,用递归也是因为以前看得一本书SCIP给我的一点提示,那本书说实在的,很久没有踏心下认真地看书了,或者说非理论的书了。现在是就喜欢看一些虚的,理论化的书,说起来一套一套的,做的时候,却一头雾水。那本SCIP实践性太强了,所以没有看完,确实遗憾的很,因为那本书给的启发很多,让一个人去考虑很多东西。
分享到:
相关推荐
华为笔试题java IOI2017 中国国家集训队第一次作业 注意:本页有关作业和分数构成的内容禁止集训队员更改。 分数构成 今年的国家队选拔分数构成和去年相同,具体如下: 集中训练:4天,每天组织一次考试,按标准分计...
Java基础知识:介绍Java语言的基本语法、数据类型、流程控制等基础知识,为后续的高级内容打下坚实的基础。 Java面向对象编程:详细讲解面向对象编程的概念、原则和特性,包括封装、继承、多态等,帮助读者理解和...
华为云DevCloud软件编程大赛·口罩配送大作战(赛道一) 用于测试 使用方式: 编译命令(要求jdk1.8):javac MaskTest.java 运行命令:java MaskTest <你的代码进程启动命令> 例如: C++(windows): java ...
图像识别运行流程为安卓客户端调用图库或图像头权限->选择图片->图片上传到后端->后端使用命令行操作调用算法predict->后端得到预测结果->返回至前端(后续可使用TensorFlow Mobile 把深度学习模型转化为pb格式文件...
是华为的开源项目。 OpenArkCompiler 的四大技术特性 将不同语言的代码编译成一组可执行文件,并在运行环境中高效执行这些文件。 支持多语言联合优化,消除跨语言调用开销。 实现轻量级语言运行时。 协作硬件和软件...
OpenArkCompiler是华为的开源项目。 OpenArkCompiler的四个技术功能 将不同语言的代码编译成一组可执行文件,并在运行环境中有效地执行这些文件。 支持多种语言的联合优化,并消除了跨语言调用的开销。 实现轻量级...
一个Android项目中不常使用(国内就华为有)的虚拟导航栏控制帮助类.有问题欢迎issue。 后续版本迁移至维护不再做更新 主要功能 系统自带半透明效果 系统自带全透明效果 自定义半透明效果 自定义全透明效果 链式调用...
7、基于Java平台开发,采用Spring、MySQL、Tomcat、Apache Kafka、Redis等开源技术,支持微服务,扩展性强。 8、许可证 Apache License, Version 2.0,开源免费。 MaxKey单点登录认证系统 更新日志: v2.7.0 ...
2、运行程序后, DLNA中的DMC(例如:你的手机中安装了DLNA的客户端)与你的PC在同一个局域网下,就可以通过DMC来浏览PC中的内容,当然也可以通过DMC将这些内容到你的大屏幕上,如电视的盒子,目前世面上所有的OTT...
继2008年9月第一款基于Android平台的手机G1发布之后,预计三星、摩托罗拉、索爱、LG、华为等公司都将推出自Gflg~Android平台的手机,中国移动也将联合各手机厂商共同推出基于Android平台的OPhone。按目前的发展态势...