2320. 统计放置房子的方式数 JavaScript计算出现问题
一开始我也是打的相乘```js
var countHousePlacements = function (n) {
const dp = new Array(n).fill(0)
dp = 2;
dp = 3;
for (let index = 2; index < dp.length; index++) {
dp = (dp + dp) % (1000000000 + 7)
}
return (dp*dp)% (1000000000 + 7)
};
```
但是发现不管怎么样都差了几百
没办法转成了dp
```js
var countHousePlacements = function (n) {
const dp = new Array(n).fill(0).map(() => new Array(4).fill(0));
dp = 1;//不存在房屋
dp = 1;//存在房屋
dp = 1;//上存在下不存在
dp = 1;//上不存在下存在
for (let index = 1; index < dp.length; index++) {
dp = (dp + dp + dp + dp) % (1000000000 + 7)
dp = dp % (1000000000 + 7)
dp = (dp + dp) % (1000000000 + 7)
dp = (dp + dp) % (1000000000 + 7)
}
let result = 0
for (let index = 0; index < 4; index++) {
result+= dp
}
return result% (1000000000 + 7)
};
```
后来提交成功发现官解跟我的答案始终都差
根据调试发现应该是JS的浮点数计算跟其他的语言有不一致的情况
给数字后面加个n并且mod的数字也改为Bigint再跑就会出现正确答案
```js
var countHousePlacements = function (n) {
const dp = new Array(n+1).fill(0n)
dp = 1n;
dp = 2n;
for (let index = 2; index < dp.length; index++) {
dp =( dp + dp) % (1000000000n + 7n)
}
return (dp*dp)% (1000000000n + 7n)
};
```
应该跟IEFI浮点数的标准实现有关,就不细究更多了,反正能过就行
页:
[1]