Leetcode 735 行星碰撞
C:
void dealLeft(int *asteroids, int size, int point) { if (point >= size) return; if (asteroids[point] >= 0) return; int left = point - 1; while (left >= 0 && asteroids[left] == 0) left--; if (left == -1 || asteroids[left] < 0) return; if (asteroids[point] + asteroids[left] > 0) asteroids[point] = 0; else if (asteroids[point] + asteroids[left] < 0) { asteroids[left] = 0; dealLeft(asteroids, size, point); } else asteroids[left] = asteroids[point] = 0; } /** * Note: The returned array must be malloced, assume caller calls free(). */ int *asteroidCollision(int *asteroids, int asteroidsSize, int *returnSize) { for (int i = 0; i < asteroidsSize; i++) { dealLeft(asteroids, asteroidsSize, i); } int size = 0; for (int i = 0; i < asteroidsSize; i++) if (asteroids[i] != 0) size++; *returnSize = size; if (size > 0) { int *reArr = (int *)malloc(sizeof(int) * size); int point = 0; for (int i = 0; i < asteroidsSize; i++) if (asteroids[i] != 0) { reArr[point] = asteroids[i]; point++; } return reArr; } else return NULL; }
JAVA:
public final int[] asteroidCollision(int[] asteroids) { for (int i = 0; i < asteroids.length; i++) { searchLeft(asteroids, i); } int len = 0, point = 0; for (int i = 0; i < asteroids.length; i++) if (asteroids[i] != 0) len++; int[] reArr = new int[len]; for (int i = 0; i < asteroids.length; i++) { if (asteroids[i] != 0) { reArr[point] = asteroids[i]; point++; } } return reArr; } private final void searchLeft(int[] asteroids, int point) { if (asteroids[point] > 0) return; int left = point - 1; while (left >= 0 && asteroids[left] == 0) left--; if (left == -1 || asteroids[left] < 0) return; if (asteroids[left] + asteroids[point] > 0) asteroids[point] = 0; else if (asteroids[left] + asteroids[point] < 0) { asteroids[left] = 0; searchLeft(asteroids, point); } else { asteroids[point] = 0; asteroids[left] = 0; } }
JS:
/** * @param {number[]} asteroids * @return {number[]} */ var asteroidCollision = function (asteroids) { for (let i = 0; i < asteroids.length; i++) dealLeft(asteroids, i); let reArr = []; for (let i = 0; i < asteroids.length; i++) if (asteroids[i]) reArr.push(asteroids[i]); return reArr; }; //处理左边反向的 var dealLeft = function (asteroids, point) { if (asteroids[point] > 0) return; let left = point - 1; while (left >= 0 && asteroids[left] == 0) left--; if (left == -1 || asteroids[left] < 0) return; if (asteroids[left] + asteroids[point] > 0) asteroids[point] = 0; else if (asteroids[left] + asteroids[point] < 0) { asteroids[left] = 0; dealLeft(asteroids, point); } else { asteroids[left] = 0; asteroids[point] = 0; } }
当你看清人们的真相,于是你知道了,你可以忍受孤独
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-03-15 策略模式 Strategy
2020-03-15 面向对象的六大编程原则