这两天木有做题却存了几题,挑了一个看起来最有乐趣的~
烦躁的时候做个题能平静下来,是不是有点变态= =
这是一道微策略的笔试题:
输入一个数字组成的字符串,插入+,-或者空格,使得表达式结果为0
比如 123可以插入成 1+2-3或者173956插入成 1 7+3 9-5 6
写出递归和非递归版本
思路:
看了题的第一感觉,感觉应该类似三叉树的搜索,用深度优先搜索可以找到某个使结果为0的表达式,但是复杂度达到了3 ^ ( n - 1 )。。。不科学
那么怎么简化或者说去除若干不可能的情形呢,如果前面的表达的绝对值大于后面连续的数字,就是比方前面的那个例子中:173+9 > 56 那么不论5和6之前插入什么都是不可能为0了,那么可以简化一部分搜索,但是本质上来说好像也没什么改进。。。
那好像可以用一下动规?虽然节省了重复的计算,但是还是要对于小规模的问题可能得到的各个值进行一番搜索,搜索的次数等于原先计算的次数,而且还浪费了空间。
怎么都想不出来。。。看来微策略是进不去了TAT,躺到床上再想一想。。。
据说12点以后睡是不要脸 3点以后睡是不要命 最近天天不要脸 偶尔不要命 faint