BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #50747同步于 2016/5/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

leetcode easy 的118题Pascal's Triangle

hotpot
2016/5/29镜像同步8 回复
118. Pascal's Triangle List<List<Integer>> res=new ArrayList<List<Integer>>(); for (int row = 1; row <= numRows; row++) { List<Integer>num=new ArrayList<Integer>(); long tem=row-1; //就是这个位置如果tem的格式用int,则输出的时候就会产生负数 num.add(1); for(int i=2;i<=row;i++){ num.add( (int) tem); tem=(int)( (tem*(i-1)*(row-i))/((i-1)*i)); }res.add(num); } return res; 因为tem的赋值只是int范围内的,所以刚开始设置int类型,结果就产生负数,换成long就可以了,求指导啊
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
ml3615556机器人#1 · 2016/5/29
tem=(int)( (tem*(i-1)*(row-i))/((i-1)*i)); 这一句在运算过程中overflow了
hotpot机器人#2 · 2016/5/29
对啊,就是这句在tem类型是int的时候i为11的时候就会溢出。但是我只是计算啊,赋值给tem的时候还是在int范围内的啊 【 在 ml3615556 的大作中提到: 】 : tem=(int)( (tem*(i-1)*(row-i))/((i-1)*i)); : 这一句在运算过程中overflow了
ml3615556机器人#3 · 2016/5/29
仔细看我的回复啊 运算过程中,知道什么叫“运算过程中”吗? Integer.MAXVALUE * 100 / 100 的结果是啥? 【 在 hotpot 的大作中提到: 】 : 对啊,就是这句在tem类型是int的时候i为11的时候就会溢出。但是我只是计算啊,赋值给tem的时候还是在int范围内的啊
nuanyangyang机器人#4 · 2016/5/29
int的范围是闭区间[-2147483648, 2147483647]内的整数。如果溢出了,只有最后32比特会保留(负数使用“2的补码”表示法)。所以, Integer.MAXVALUE*100/100 == 2147483647*100/100 == -100 / 100 == -1 这个-100就是2147483647*100 == 214748364700保留最后32位,按有符号整数解读得来,碰巧是-100。
hotpot机器人#5 · 2016/5/30
是不是说因为前面要赋值给int类型,所以在计算的过程中任何一步都在一直在考虑是否超过int范围,如果是赋值给long类型,所以在计算的时候考虑的是long范围 【 在 ml3615556 的大作中提到: 】 : 仔细看我的回复啊 : 运算过程中,知道什么叫“运算过程中”吗? : : ...................
hotpot机器人#6 · 2016/5/30
为啥你啥都会啊。。 【 在 nuanyangyang 的大作中提到: 】 : int的范围是闭区间[-2147483648, 2147483647]内的整数。如果溢出了,只有最后32比特会保留(负数使用“2的补码”表示法)。所以, : Integer.MAXVALUE*100/100 : == 2147483647*100/100 : ...................
ml3615556机器人#7 · 2016/5/30
Not exactly 是你写的表达式只有int参与,而不是将结果给一个int 你试试乘以一个double 1? 【 在 hotpot 的大作中提到: 】 : 是不是说因为前面要赋值给int类型,所以在计算的过程中任何一步都在一直在考虑是否超过int范围,如果是赋值给long类型,所以在计算的时候考虑的是long范围 : 【 在 ml3615556 的大作中 : .........
hotpot机器人#8 · 2016/5/30
哦,那就是说因为计算的时候等号右边的tem是int类型,所以等号右边整体是int类型,然后考虑每一步骤都是不能超过int范围,如果出现double或者long就认为整体是对应的类型,那这样理解对吗 【 在 ml3615556 的大作中提到: 】 : Not exactly : 是你写的表达式只有int参与,而不是将结果给一个int : 你试试乘以一个double 1? : ...................