`
testforvln
  • 浏览: 18929 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • superich2008: 1、去重可以用Set集合2、在排序后,相邻2个元素如果相同可以 ...
    4Sum

Flatten Binary Tree to Linked List && Generate Parentheses && Gray Code

阅读更多
Flatten太简单了 递归 一遍过 oh yeah = = 也没什么好骄傲的
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void flatten(TreeNode root) {
        // Start typing your Java solution below
        // DO NOT write main() function
        if (root == null)
            return;
        TreeNode left = root.left;
        TreeNode right = root.right;
        flatten(left);
        flatten(right);
        root.left = null;
        root.right = left;
        TreeNode iter = root;
        while (iter.right != null)
            iter = iter.right;
        iter.right = right;
    }
}


括号那题可以看成多个节点组成一个森林,这样想来可以用递归来做。但是想了一下计算量太多(重复太多),所以用递推——动规来做
S(n) = S(0)*S(n-1) + S(1)*S(n-2) + …… + S(n-1)*S(0)
。。。。结果发现不是计算长度而是生成字符串。。。。不过也可以用递推吧
public class Solution {
    ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
    
    public ArrayList<String> generateParenthesis(int n) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<String> results = new ArrayList<String>();
        if (n == 0){
            results.add("");
            return results;
        }
            
        if (lists.size() < n){
            ArrayList<String> temp = generateParenthesis(n-1);
            lists.add(temp);
        }
        ArrayList<String> children;
        ArrayList<String> friends;
        for (int i = 0; i < n; ++i){
            children = new ArrayList<String>();
            friends = new ArrayList<String>();
            children.addAll(lists.get(i));
            friends.addAll(lists.get(n-1-i));
            for (int j = 0; j < children.size(); ++j){
                children.set(j, "(" + children.get(j) + ")");
                for (int k = 0; k < friends.size(); ++j)
                    results.add(children.get(j) + friends.get(k));
            }
        }
        return results;
    }
}

不知道为什么会runtime error,明天起来查吧 sigh

窘 发现是 for (int k = 0; k < friends.size(); ++j)最后k写成了j
然后觉得还是把lists放在函数里面比较好?当然试验了以下里面和外面都行。
import java.util.ArrayList;

public class Solution {    
    public ArrayList<String> generateParenthesis(int n) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
        ArrayList<String> results = new ArrayList<String>();
        if (n == 0){
            results.add("");
            return results;
        }
            
        for (int i = 0; i < n; ++i){
            ArrayList<String> temp = generateParenthesis(i);
            lists.add(temp);
        }
        ArrayList<String> children;
        ArrayList<String> friends;
        for (int i = 0; i < n; ++i){
            children = new ArrayList<String>();
            friends = new ArrayList<String>();
            children.addAll(lists.get(i));
            friends.addAll(lists.get(n-1-i));
            for (int j = 0; j < children.size(); ++j){
                children.set(j, "(" + children.get(j) + ")");
                for (int k = 0; k < friends.size(); ++k)
                    results.add(children.get(j) + friends.get(k));
            }
        }
        return results;
    }
}


格雷码发现了一个规律,高位增加1之后,低位总是反过来一遍就能和原来组成新的多位格雷码。
public class Solution {
    public ArrayList<Integer> grayCode(int n) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<Integer> results = new ArrayList<Integer>();
        results.add(0);
        if (n == 0)
            return results;
        results.add(1);
        if (n == 1)
            return results;
        for (int i = 2; i <= n; ++i){
            int size = results.size(); 
            int high = 1 << (i-1);
            for (int j = size-1; j >= 0; j--)
                results.add(high + results.get(j));
        }
        return results;
    }
}

不过还是没有一遍过,又是循环中i写成了n这种错误,sigh,以后要注意阿。。。
分享到:
评论

相关推荐

    Flatten-Binary-Tree-To-Linked-List

    Flatten-Binary-Tree-To-Linked-List

    cpp-算法精粹

    Flatten Binary Tree to Linked List Populating Next Right Pointers in Each Node II 二叉树的构建 Construct Binary Tree from Preorder and Inorder Traversal Construct Binary Tree from Inorder and ...

    Tree and Divide Conquer

    文章目录Tree and Divide Conquer一、树的性质Divide and Conquer模版114 Flatten Binary Tree to Linked List1)从最简单的case开始2)一般case3) merge总结 一、树的性质 参考:Tree总结 由于树的结构,这种数据...

    leetcode:leetcode解题

    leetcode做过的LeetCode的题目记录一下。对一些比较经典的题型进行分类总结。数据结构 数组 字符串 队列 链表 双指针 栈 堆 树 二叉搜索树 字典树 线段树 并查集 哈希表 图基础... Flatten Binary Tree to Linked List

    leetcode答案-leetcode-tools:leetcode-工具

    leetcode 答案leetcode 的工具 这个项目提供了一些工具来更容易地测试 leetcode 答案。 树:切片 &lt;-&gt; TreeNode 此工具有助于将切片转换为 ...--name="Flatten Binary Tree to Linked List" --type=tree

    LeetCode最全代码

    * [Linked List](https://github.com/kamyu104/LeetCode#linked-list) * [Stack](https://github.com/kamyu104/LeetCode#stack) * [Queue](https://github.com/kamyu104/LeetCode#queue) * [Heap]...

    geojson-flatten:在geojson中展平多部分几何和几何集合

    geojson-flatten 将文件中的MultiPoint,MultiPolygon,MultiLineString和GeometryCollection几何图形展平为简单的非复杂几何图形。 如果传入FeatureCollection,则返回FeatureCollection。 如果传入单个功能,则...

    Laravel开发-flatten

    Laravel开发-flatten 用于照明框架的包,它将页面扁平化为纯HTML

    leetcode92java-Algorithms::memo:在这里你可以找到我在算法和数据结构方面的进展

    flatten_binary_tree_to_linked_list Java 中等的 100.00% 100.00% binary_tree_pruning Java 中等的 100.00% 100.00% insert_into_a_binary_search_tree Java 中等的 100.00% 100.00% maximum_level_sum_of_a_...

    Tool for Flatten A Folder

    命令行工具。拷贝多个目录下的指定文件到目标目录

    broccoli-flatten

    西兰花压扁 扁平化文件树,因此所有...tree = flatten ( tree , options ) ; 选项 支持以下选项: destDir目录存放所有文件的位置 ###例子 var pickFiles = require ( 'broccoli-static-compiler' ) ; var flatten

    flatten-maven-plugin:扁平化Maven插件

    MojoHaus Flatten Maven插件 这是 。 1.0.x分支: 快速开始 这个插件会生成您pom.xml的扁平版本,并使maven可以安装和部署该版本,而不是原始pom.xml。 &lt;groupId&gt;org.codehaus.mojo &lt;artifactId&gt;flatten-...

    flatten_2.0

    lighthouse3d里面glsl教程3的例子

    .NET程序反编译神器Reflector 7.6.0.233 VSPro Edition

    Use the simple tree view to navigate through all types and members, and click to see the decompiled code. Browse decompiled assembliesBrowse decompiled assemblies Back to top The world’s most ...

    Python库 | flatten_json-0.1.12.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:flatten_json-0.1.12.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python中flatten( ),matrix.A用法说明

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个折叠成一维的数组。但是该函数只能适用于numpy对象,即array或者mat,普通的list列表是不行...‘C’ means to flatten in row-major (C-style)

    flatten_gds.tcl

    flatten_gds.tcl

    tree是用于处理嵌套数据结构的python库-python

    tree.flatten(structure) [1, 2, 3, 4] &gt;&gt;&gt; tree.map_structure(lambda v: v**2, structure) [[1], [[[4, 9]]], [16]] 树由优化的 C++ 实现支持,适用于要求苛刻的应用程序,例如机器学习模型。 安装 通过...

    Python中flatten( )函数及函数用法详解

    flatten只能适用于numpy对象,即array或者mat,普通的list列表不适用!。 a.flatten():a是个数组,a.flatten()就是把a降到一维,默认是按行的方向降 。 a.flatten().A:a是个矩阵,降维后还是个矩阵,矩阵.A(等效...

    用于处理树数据结构的功能和不变助手的集合。-JavaScript开发

    同时支持Trees:Object和Tree Lists:Array &lt;Object&gt;。 咖喱,易于局部使用。 treecko用于处理树数据结构的功能和不变助手的集合。 两棵树:对象和树列表:数组 支持。 咖喱,易于局部使用。 映射softMap ...

Global site tag (gtag.js) - Google Analytics