473:火柴拼正方形
This commit is contained in:
parent
f7bf2f1a0d
commit
4a52c17ee4
82
src/main/java/leetcode/editor/cn/MatchsticksToSquare.java
Normal file
82
src/main/java/leetcode/editor/cn/MatchsticksToSquare.java
Normal file
@ -0,0 +1,82 @@
|
||||
//<p>你将得到一个整数数组 <code>matchsticks</code> ,其中 <code>matchsticks[i]</code> 是第 <code>i</code> 个火柴棒的长度。你要用 <strong>所有的火柴棍</strong> 拼成一个正方形。你 <strong>不能折断</strong> 任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须 <strong>使用一次</strong> 。</p>
|
||||
//
|
||||
//<p>如果你能使这个正方形,则返回 <code>true</code> ,否则返回 <code>false</code> 。</p>
|
||||
//
|
||||
//<p> </p>
|
||||
//
|
||||
//<p><strong>示例 1:</strong></p>
|
||||
//
|
||||
//<p><img src="https://assets.leetcode.com/uploads/2021/04/09/matchsticks1-grid.jpg" /></p>
|
||||
//
|
||||
//<pre>
|
||||
//<strong>输入:</strong> matchsticks = [1,1,2,2,2]
|
||||
//<strong>输出:</strong> true
|
||||
//<strong>解释:</strong> 能拼成一个边长为2的正方形,每边两根火柴。
|
||||
//</pre>
|
||||
//
|
||||
//<p><strong>示例 2:</strong></p>
|
||||
//
|
||||
//<pre>
|
||||
//<strong>输入:</strong> matchsticks = [3,3,3,3,4]
|
||||
//<strong>输出:</strong> false
|
||||
//<strong>解释:</strong> 不能用所有火柴拼成一个正方形。
|
||||
//</pre>
|
||||
//
|
||||
//<p> </p>
|
||||
//
|
||||
//<p><strong>提示:</strong></p>
|
||||
//
|
||||
//<ul>
|
||||
// <li><code>1 <= matchsticks.length <= 15</code></li>
|
||||
// <li><code>1 <= matchsticks[i] <= 10<sup>8</sup></code></li>
|
||||
//</ul>
|
||||
//<div><div>Related Topics</div><div><li>位运算</li><li>数组</li><li>动态规划</li><li>回溯</li><li>状态压缩</li></div></div><br><div><li>👍 316</li><li>👎 0</li></div>
|
||||
package leetcode.editor.cn;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
// 473:火柴拼正方形
|
||||
public class MatchsticksToSquare {
|
||||
public static void main(String[] args) {
|
||||
Solution solution = new MatchsticksToSquare().new Solution();
|
||||
// TO TEST
|
||||
}
|
||||
|
||||
//leetcode submit region begin(Prohibit modification and deletion)
|
||||
class Solution {
|
||||
public boolean makesquare(int[] matchsticks) {
|
||||
Arrays.sort(matchsticks);
|
||||
int sum = Arrays.stream(matchsticks).sum();
|
||||
if (sum % 4 != 0 || matchsticks[matchsticks.length - 1] > sum / 4) {
|
||||
return false;
|
||||
}
|
||||
int avg = sum / 4;
|
||||
return dfs(matchsticks, matchsticks.length - 1, new int[]{avg, avg, avg, avg});
|
||||
}
|
||||
|
||||
private boolean dfs(int[] matchsticks, int index, int[] sums) {
|
||||
if (index == -1) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (sums[i] != 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
int num = matchsticks[index];
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (sums[i] - num < 0) {
|
||||
continue;
|
||||
}
|
||||
sums[i] -= num;
|
||||
if (dfs(matchsticks, index - 1, sums)) {
|
||||
return true;
|
||||
}
|
||||
sums[i] += num;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//leetcode submit region end(Prohibit modification and deletion)
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
<p>你将得到一个整数数组 <code>matchsticks</code> ,其中 <code>matchsticks[i]</code> 是第 <code>i</code> 个火柴棒的长度。你要用 <strong>所有的火柴棍</strong> 拼成一个正方形。你 <strong>不能折断</strong> 任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须 <strong>使用一次</strong> 。</p>
|
||||
|
||||
<p>如果你能使这个正方形,则返回 <code>true</code> ,否则返回 <code>false</code> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img src="https://assets.leetcode.com/uploads/2021/04/09/matchsticks1-grid.jpg" /></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong> matchsticks = [1,1,2,2,2]
|
||||
<strong>输出:</strong> true
|
||||
<strong>解释:</strong> 能拼成一个边长为2的正方形,每边两根火柴。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong> matchsticks = [3,3,3,3,4]
|
||||
<strong>输出:</strong> false
|
||||
<strong>解释:</strong> 不能用所有火柴拼成一个正方形。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= matchsticks.length <= 15</code></li>
|
||||
<li><code>1 <= matchsticks[i] <= 10<sup>8</sup></code></li>
|
||||
</ul>
|
||||
<div><div>Related Topics</div><div><li>位运算</li><li>数组</li><li>动态规划</li><li>回溯</li><li>状态压缩</li></div></div><br><div><li>👍 316</li><li>👎 0</li></div>
|
Loading…
Reference in New Issue
Block a user