Redian新闻
>
东方人美,西方人美,这个才是point
avatar
东方人美,西方人美,这个才是point# Fashion - 美丽时尚
D*6
1
input: * + 2 3 4
output: 20
今天电面挂这儿了。这题recursion怎么做?
avatar
a*a
2
thx
avatar
l*i
3
不过作为中国人,我本能觉得中国人最美。中国人长得最decent,高贵,有气质,有内
涵。欧美人长得很肤浅,其实就是老祖宗眼里的野蛮人样子。
发信人: reversebell (青面瘦), 信区: Fashion
标 题: Re: 有没有和我一样,觉得混血儿不比亚洲人漂亮的?
发信站: BBS 未名空间站 (Sun Aug 22 17:38:07 2010, 美东)
如果现在最发达国家都在非洲,估计长成非洲状才是美的标准。。。
avatar
x*0
4
当年在电脑上写的面试题啊 好怀念
非recursion:
不停地找‘operation number number’ 的组合
recursion
类似的方法,不过找number的时候tricky一点。建立两个counter,一个数operator的
数量,一个数number的数量。当number的数量=operator+1,就可以切出来成为一个
number
avatar
b*9
5
you

【在 a***a 的大作中提到】
: thx
avatar
p*m
6
我也欣赏亚洲人的美,中国,日本,韩国,泰国,印度尼西亚,马来西亚的都不错。

【在 l***i 的大作中提到】
: 不过作为中国人,我本能觉得中国人最美。中国人长得最decent,高贵,有气质,有内
: 涵。欧美人长得很肤浅,其实就是老祖宗眼里的野蛮人样子。
: 发信人: reversebell (青面瘦), 信区: Fashion
: 标 题: Re: 有没有和我一样,觉得混血儿不比亚洲人漂亮的?
: 发信站: BBS 未名空间站 (Sun Aug 22 17:38:07 2010, 美东)
: 如果现在最发达国家都在非洲,估计长成非洲状才是美的标准。。。

avatar
r*7
7
用stack, 一个stack放数字 一个stack放符号。
如果数字那个stack size 达到2, 怎pop这两个数字 并且pop一个符号 进行运算。 得
到的值再放进数字的stack。
继续读数。
直到读完input 并且符号stack为空, return 数字stack pop的元素
avatar
z*q
8
b1g1的东西可以要鱼漂马
avatar
r*7
9
也可以这样 从后往前, 只需要一个stack, 先存 4, 再存3, 再存2. 遇到符号 则
pop两次。 然后和符号运算。 结果在放进stack 然后继续,直到没有输入。
wiki:
http://en.wikipedia.org/wiki/Polish_notation
avatar
a*a
10
买12瓶用6张coupon?

【在 b*****9 的大作中提到】
: you
avatar
u*o
11
这题recursion比非recursion难写啊。。
avatar
b*9
12
你考古
我一次最多买四个
没有12的经验

【在 a***a 的大作中提到】
: 买12瓶用6张coupon?
avatar
L*e
13
Recursive solution: 两头切不行吗?
avatar
l*s
14
我一次你买过6平
avatar
c*1
15
int reverse_polish(const char*& str) {
OpCode op = getOpCode(str);
int x = reverse_polish(str);
int y = reverse_polish(str);
return op.apply(x,y);
}
avatar
x*j
16
有啊
avatar
r*7
17
始终没想到 recursion, 求大神上code。。。
avatar
s*5
18
从末尾开始找第一个operator,找到就把之后的两个数取出做运算,把结果放回原
string,再接着recusion。
avatar
c*1
19
here is the correct version:
int reverse_polish(const char*& str) {
if (is_number(str)) return parse_nuber(str);
OpCode op = getOpCode(str);
int x = reverse_polish(str);
int y = reverse_polish(str);
return op.apply(x,y);
}
note there is no error check, and note str is passed as reference to const
char*, so that functions can read what it needs as well as forwarding the
pointer.
avatar
r*7
20
有没有java的实现方法啊,不太看得懂这个。。。

【在 x********0 的大作中提到】
: 当年在电脑上写的面试题啊 好怀念
: 非recursion:
: 不停地找‘operation number number’ 的组合
: recursion
: 类似的方法,不过找number的时候tricky一点。建立两个counter,一个数operator的
: 数量,一个数number的数量。当number的数量=operator+1,就可以切出来成为一个
: number

avatar
f*b
21
mark
avatar
L*e
22
试着用Java写了一个。还是不够简练。Have to use String array, otherwise cannot
push the result back to the original array.
public static int evaluate(String[] array, int from, int to){
// get first operator, backward
int j = to;
String s = array[j];
while (j >= from && !Operator.isOperator(s.charAt(0))){
s = array[--j];
}
// get operands
Operator op = Operator.getOperator(s.charAt(0));
int opIndex = j;
int a = Integer.valueOf(array[++j]);
int b = Integer.valueOf(array[++j]);
int result = op.apply(a, b);
// most-left operator, done
if (opIndex == 0){
return result;
}
// push result back
array[opIndex] = Integer.toString(result);
//copy remaining over
j++;
while (j <= to){
array[++opIndex]= array[j++];
}
return evaluate(array, from, opIndex);
}
@Test
public void testPolishNotationSimple(){
String[] array = {"-", "5", "*", "6", "7"};
int result = PolishNotation.evaluate(array, 0, array.length - 1);
assertEquals(result, -37);
}
@Test
public void testPolishNotationSimple2(){
String[] array = {"*", "+", "2", "3", "4"};
int result = PolishNotation.evaluate(array, 0, array.length - 1);
assertEquals(result, 20);
}
@Test
public void testPolishNotationComplex(){
String[] array = {"-", "*", "/", "15", "-", "7", "+", "1", "1", "3", "+"
, "2", "+", "1", "1"};
int result = PolishNotation.evaluate(array, 0, array.length - 1);
assertEquals(result, 5);
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。