- 浏览: 142104 次
-
文章分类
- 全部博客 (189)
- Tree (14)
- Dynamic Programming (34)
- Array (20)
- Search (1)
- Hash (12)
- Backtracking (22)
- Divide and Conque (8)
- Greedy (6)
- Stack (12)
- software (0)
- List (7)
- Math (22)
- Two pointers (16)
- String (20)
- Linux (1)
- Sliding Window (4)
- Finite State Machine (1)
- Breadth-first Search (7)
- Graph (4)
- DFS (6)
- BFS (3)
- Sort (9)
- 基础概念 (2)
- 沟通表达 (0)
- Heap (2)
- Binary Search (15)
- 小结 (1)
- Bit Manipulation (8)
- Union Find (4)
- Topological Sort (1)
- PriorityQueue (1)
- Design Pattern (1)
- Design (1)
- Iterator (1)
- Queue (1)
最新评论
-
likesky3:
看了数据结构书得知并不是迭代和递归的区别,yb君的写法的效果是 ...
Leetcode - Graph Valid Tree -
likesky3:
迭代和递归的区别吧~
Leetcode - Graph Valid Tree -
qb_2008:
还有一种find写法:int find(int p) { i ...
Leetcode - Graph Valid Tree -
qb_2008:
要看懂这些技巧的代码确实比较困难。我是这么看懂的:1. 明白这 ...
Leetcode - Single Num II -
qb_2008:
public int singleNumber2(int[] ...
Leetcode - Single Num II
Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.
Example 2
Input: "2*3-4*5"
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
Output: [-34, -14, -10, -10, 10]
[分析] 这题参考https://leetcode.com/discuss/48488/c-4ms-recursive-method 。 思路类似Unique Binary Search Trees II,以某个运算符为分界线,递归计算左右两边可能的值,然后根据当前运算符归并结果。纯粹的递归含有冗余计算,可同时保留中间结果来提高效率。
Example 2
Input: "2*3-4*5"
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
Output: [-34, -14, -10, -10, 10]
[分析] 这题参考https://leetcode.com/discuss/48488/c-4ms-recursive-method 。 思路类似Unique Binary Search Trees II,以某个运算符为分界线,递归计算左右两边可能的值,然后根据当前运算符归并结果。纯粹的递归含有冗余计算,可同时保留中间结果来提高效率。
public class Solution { // method 2: dp public List<Integer> diffWaysToCompute(String input) { HashMap<String, List<Integer>> dpMap = new HashMap<String, List<Integer>>(); return computeWithDP(input, dpMap); } public List<Integer> computeWithDP(String input, HashMap<String, List<Integer>> dpMap) { List<Integer> result = new ArrayList<Integer>(); if (input == null || input.length() == 0) return result; int N = input.length(); for (int i = 0; i < N; i++) { char c = input.charAt(i); if (c == '+' || c == '-' || c == '*') { String leftSubStr = input.substring(0, i); String rightSubStr = input.substring(i + 1, N); List<Integer> left = dpMap.get(leftSubStr); if (left == null) left = computeWithDP(leftSubStr, dpMap); List<Integer> right = dpMap.get(rightSubStr); if (right == null) right = computeWithDP(rightSubStr, dpMap); for (int op1: left) { for (int op2: right) { if (c == '+') result.add(op1 + op2); else if (c == '-') result.add(op1 - op2); else result.add(op1 * op2); } } } } if (result.isEmpty()) result.add(Integer.parseInt(input)); dpMap.put(input, result); return result; } // method 1: recursive public List<Integer> diffWaysToCompute1(String input) { List<Integer> result = new ArrayList<Integer>(); if (input == null || input.length() == 0) return result; int N = input.length(); for (int i = 0; i < N; i++) { char c = input.charAt(i); if (c == '+' || c == '-' || c == '*') { List<Integer> left = diffWaysToCompute(input.substring(0, i)); List<Integer> right = diffWaysToCompute(input.substring(i + 1, N)); for (int op1 : left) { for (int op2 : right) { if (c == '+') result.add(op1 + op2); else if (c == '-') result.add(op1 - op2); else result.add(op1 * op2); } } } } // if the string contains only number if (result.isEmpty()) result.add(Integer.parseInt(input)); return result; } }
发表评论
-
Leetcode - The Skyline Problem
2015-09-04 19:09 1122[分析] 思路1参考https://leetcode.com/ ... -
Leetcode - Ugly Number II
2015-08-24 22:54 1190[分析] 暴力的办法就是从1开始检查每个数是否是丑数,发现丑数 ... -
Leetcode - Paint House II
2015-08-20 20:37 1631There are a row of n houses, ea ... -
Leetcode - Maximum Square
2015-08-16 13:33 544Given a 2D binary matrix filled ... -
Leetcode - Paint House
2015-08-16 10:48 1172There are a row of n houses, ea ... -
Leetcode - Sort List
2015-08-15 17:41 530Sort a linked list in O(n log n ... -
Leetcode - Median of Two Sorted Arrays
2015-07-12 11:02 486There are two sorted arrays num ... -
Leetcode - Merge k Sorted Lists
2015-07-08 09:57 505Merge k sorted linked lists and ... -
Jump Game II
2015-07-05 16:49 577Given an array of non-negative ... -
Leetcode - Jump Game
2015-07-05 15:52 555Given an array of non-negative ... -
Leetcode - Interleaving String
2015-06-07 11:41 638Given s1, s2, s3, find whe ... -
Leetcode - Wildcard Matching
2015-06-06 20:01 1012Implement wildcard pattern ma ... -
Leetcode - Maximal Square
2015-06-04 08:25 641Given a 2D binary matrix fille ... -
Leetcode - Kth Largest Element in an Array
2015-05-23 21:25 568Find the kth largest element ... -
Leetcode - Palindrome Partition II
2015-05-21 21:15 702Given a string s, partition ... -
Leetcode - Palindrome Partition
2015-05-21 09:56 808Given a string s, partition s s ... -
Leetcode - House Robber II
2015-05-20 22:34 795Note: This is an extension of ... -
Leetcode - Maximum Rectangle
2015-05-20 08:58 520Given a 2D binary matrix fill ... -
Leetcode - Scramble String
2015-05-17 14:22 610Given a string s1, we may repre ... -
Leetcode - Regular Expression Matching
2015-05-16 16:31 434Implement regular expression ma ...
相关推荐
以“Different Ways to Add Parentheses”为例,这个问题是LeetCode上的一个典型算法题,要求解决给定一个没有括号的数学表达式,返回所有可能的计算结果。这个问题在算法上通常被划分为“分治”算法类别,需要利用...
* Different Ways to Add Parentheses:该题目要求计算将一个字符串分解成不同的括号表达式的方式数。解决该题目需要使用分治法,递归地计算每个子字符串的括号表达式,最后合并结果。 本资源摘要信息涵盖了算法...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf
内容概要:本文详细介绍了基于瞬时无功功率理论的三电平有源电力滤波器(APF)仿真研究。主要内容涵盖并联型APF的工作原理、三相三电平NPC结构、谐波检测方法(ipiq)、双闭环控制策略(电压外环+电流内环PI控制)以及SVPWM矢量调制技术。仿真结果显示,在APF投入前后,电网电流THD从21.9%降至3.77%,显著提高了电能质量。 适用人群:从事电力系统研究、电力电子技术开发的专业人士,尤其是对有源电力滤波器及其仿真感兴趣的工程师和技术人员。 使用场景及目标:适用于需要解决电力系统中谐波污染和无功补偿问题的研究项目。目标是通过仿真验证APF的有效性和可行性,优化电力系统的电能质量。 其他说明:文中提到的仿真模型涉及多个关键模块,如三相交流电压模块、非线性负载、信号采集模块、LC滤波器模块等,这些模块的设计和协同工作对于实现良好的谐波抑制和无功补偿至关重要。
内容概要:本文探讨了在工业自动化和物联网交汇背景下,构建OPC DA转MQTT网关软件的需求及其具体实现方法。文中详细介绍了如何利用Python编程语言及相关库(如OpenOPC用于读取OPC DA数据,paho-mqtt用于MQTT消息传递),完成从OPC DA数据解析、格式转换到最终通过MQTT协议发布数据的关键步骤。此外,还讨论了针对不良网络环境下数据传输优化措施以及后续测试验证过程。 适合人群:从事工业自动化系统集成、物联网项目开发的技术人员,特别是那些希望提升跨协议数据交换能力的专业人士。 使用场景及目标:适用于需要在不同通信协议间建立高效稳定的数据通道的应用场合,比如制造业生产线监控、远程设备管理等。主要目的是克服传统有线网络限制,实现在不稳定无线网络条件下仍能保持良好性能的数据传输。 其他说明:文中提供了具体的代码片段帮助理解整个流程,并强调了实际部署过程中可能遇到的问题及解决方案。