Comments (3)
/**
* 思路:
* 每个容器有两个选择,比如:A,可以倒入B,或者倒入C
* 同样,B可以倒入A,也可以倒入C
* 那么每次就有8种可能
*
* 每产生一种可能,顺着这种可能的结果,继续去遍历更多可能
* 那么,将会产生很多解,这些解,有些会是重复的,这个时候需要记录,这里用cache
*
* 然后,还有当前深度搜索的分支如果没有结束,会涉及到已经visited的结果,这些结果需要记录,用totalPath
*
* @returns
*/
function findContainer() {
var totalPath = new Set();
var cache = new Map();
var rel = splitH2O({
c8: 8,
c5: 0,
c3: 0
}, totalPath, cache);
if (rel) {
return Array.from(totalPath);
}
return false;
}
function splitH2O({
c8,
c5,
c3
}, totalPath, cache) {
var path = `${c8}${c5}${c3}`;
if (totalPath.has(path)) {
return false;
}
if (cache.has(path)) {
return cache.get(path);
}
totalPath.add(path);
if (c8 == 4 || c5 == 4 || c3 == 4) {
return true;
}
var limits = [8, 5, 3];
for (var i = 0; i < limits.length; i++) {
for (var j = 0; j < limits.length; j++) {
if (j == i) continue;
var rel = moveH2oToOther(limits[i], limits[j], {
c8,
c5,
c3
});
rel = splitH2O(rel, totalPath, cache);
if (rel) return true;
}
}
totalPath.delete(path);
cache.set(path, false);
return false;
}
function moveH2oToOther(limitsA, limitsB, all) {
a = all[`c${limitsA}`];
b = all[`c${limitsB}`];
if (limitsB - b > a) {
all[`c${limitsA}`] = 0;
all[`c${limitsB}`] = b + a;
return all;
} else {
all[`c${limitsA}`] = a - (limitsB - b);
all[`c${limitsB}`] = limitsB;
return all;
}
}
from leetcode.
/** * 思路: * 每个容器有两个选择,比如:A,可以倒入B,或者倒入C * 同样,B可以倒入A,也可以倒入C * 那么每次就有8种可能 * * 每产生一种可能,顺着这种可能的结果,继续去遍历更多可能 * 那么,将会产生很多解,这些解,有些会是重复的,这个时候需要记录,这里用cache * * 然后,还有当前深度搜索的分支如果没有结束,会涉及到已经visited的结果,这些结果需要记录,用totalPath * * @returns */ function findContainer() { var totalPath = new Set(); var cache = new Map(); var rel = splitH2O({ c8: 8, c5: 0, c3: 0 }, totalPath, cache); if (rel) { return Array.from(totalPath); } return false; } function splitH2O({ c8, c5, c3 }, totalPath, cache) { var path = `${c8}${c5}${c3}`; if (totalPath.has(path)) { return false; } if (cache.has(path)) { return cache.get(path); } totalPath.add(path); if (c8 == 4 || c5 == 4 || c3 == 4) { return true; } var limits = [8, 5, 3]; for (var i = 0; i < limits.length; i++) { for (var j = 0; j < limits.length; j++) { if (j == i) continue; var rel = moveH2oToOther(limits[i], limits[j], { c8, c5, c3 }); rel = splitH2O(rel, totalPath, cache); if (rel) return true; } } totalPath.delete(path); cache.set(path, false); return false; } function moveH2oToOther(limitsA, limitsB, all) { a = all[`c${limitsA}`]; b = all[`c${limitsB}`]; if (limitsB - b > a) { all[`c${limitsA}`] = 0; all[`c${limitsB}`] = b + a; return all; } else { all[`c${limitsA}`] = a - (limitsB - b); all[`c${limitsB}`] = limitsB; return all; } }
你的代码真有特色
from leetcode.
认领
from leetcode.
Related Issues (20)
- 树专题中双色标记法后序和前序写反了 HOT 2
- leetcode/thinkings/tree.md 出错 HOT 1
- some error
- 二分查找专题,寻找最左/右插入位置算法模板错误问题 HOT 9
- possible code error in thinkings/heap.md HOT 1
- link error HOT 4
- link is not correct
- [695.最大岛屿面积,360,面试原题]【每日一题】 HOT 3
- 【专题】 反向思考 HOT 3
- 【专题】 考虑每一项对结果到的贡献
- 【专题】递推方程时间复杂度优化
- 已发布文章的代码错误 HOT 7
- Remove duplicate CPP solution and add Python solution for problem 100.same-tree
- Add OSSF Scorecard security workflow
- 题目的排版可否改一改
- 关于二分法中查找中间点索引的算式 HOT 6
- leetcode-thinkings-tree.md BFS 模版调整 HOT 3
- anki-card 中只有10道题吗?截止到2023.11 HOT 1
- 【每日一题】- 2020-xx-xx - xxx
- 大佬,考虑出一个最短路径的专题吗 HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from leetcode.