String和StringBuilder
leetcode257. 二叉树的所有路径
一个小知识点记录以下: 执行效率
两种递归的实现方式
string
class Solution {
List<String>ans1 = new LinkedList<>();
public List<String> binaryTreePaths(TreeNode root) {
if (root == null){
return ans1;
}
getResult2(root, "");
return ans1;
}
private void getResult2(TreeNode root, String s) {
if (root == null){
return;
}
s += root.val;
if (root.left == null && root.right == null){
ans1.add(s);
}else {
getResult2(root.left,s + "->");
getResult2(root.right,s + "->");
}
}
}
执行时间:
StringBuilder
List<String>ans1 = new LinkedList<>();
public List<String> binaryTreePaths1(TreeNode root) {
if (root == null){
return ans1;
}
getResult2(root, "");
return ans1;
}
private void getResult2(TreeNode root, String s) {
if (root == null){
return;
}
StringBuilder sb = new StringBuilder(s);
sb.append(root.val);
if (root.left == null && root.right == null){
ans1.add(sb.toString());
}else {
sb.append("->");
getResult2(root.left,sb.toString());
getResult2(root.right,sb.toString());
}
}
执行时间:
分析
比较两段代码可以知道,代码基本上是一致的,唯一的不同就是在合并字符串的时候不同,可以明显发现,使用StringBuilder来合并字符串比直接使用字符相加的方式的效率高的多
原理
原因: 后面补充
小结
以后遇到需要操作字符串合并删除等操作,直接使用StringBuilder,提高代码的执行效率