其实,上一篇的核心实现分为两部分,第二部分属于“投机取巧”地利用语言工具的函数或方法,这点我有言在先。不过这也是我们认为的实现的“缺陷”部分(函数或方法毕竟是人家已经封装好的,还是自己实现一遍更踏实)。下面我就改进一下代码,用构造逆波兰表达式的方式回炉再造一遍,注释写的很清楚,上代码吧:
c#代码实现:
}
}
}
}
}
}
}
分别运行上面的代码,我们发现输入相同顺序的数字,c#和js产生的表达式可能不同,这是因为输入相同的数字,可以有不同的加减乘除组合方式使产生的结果相同。有人发邮件问如何分辨出产生的结果有无重复,如何一次取出所有的加减乘除组合方式使之等于预期的值(比如24)。我想说这两个问题之前我真的没想过(平时玩游戏,先算出来就算赢,一种表达式足矣),解决起来不是很难,我用c#实现了一种无重复表达式的实现,只要改进一个方法就可以了:
}
}
}
最后,我喜欢这样的拍砖,欢迎大家继续。