leetcode 【LeetCode】257. Binary Tree Paths 问题描述 Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 / \ 2 3 \ 5 All root-to-leaf paths are: ["1->2->5", "1->3"] 输出二叉树所有从根节点到叶子节点的路径。递归即可。 代码 class
leetcode 【LeetCode】242. Valid Anagram 问题描述 Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = "anagram", t = "nagaram", return true. s = "rat", t = "car", return false.
leetcode 【LeetCode】237. Delete Node in a Linked List 问题描述 Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed the linked list is 1 -> 2 -> 3 ->
leetcode 【LeetCode】235. Lowest Common Ancestor of a Binary Search Tree 问题描述 Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST. According to the definition of LCA on Wikipedia: “The lowest common ancestor is
leetcode 【LeetCode】234. Palindrome Linked List 问题描述 Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time and O(1) space? 问题分析 使用快慢指针找到中点,然后将后半截链表逆置,再将后半截与前半截进行比较,如果有一个数不相等则返回false;否则返回true。 代码
leetcode 【LeetCode】232. Implement Queue using Stacks 问题描述 Implement the following operations of a queue using stacks. * push(x) -- Push element x to the back of queue. * pop() -- Removes the element from in front of queue. * peek() --
leetcode 【LeetCode】231. Power of Two 问题描述 Given an integer, write a function to determine if it is a power of two. 判断一个数是否为2的次方数 思路 1. 当n>1时迭代,如果n%2!=0,即n不是2的倍数,直接false,否则令n=n/2,继续下一轮迭代。结束循环后,若n=1则为次方数。
leetcode 【LeetCode】226. Invert Binary Tree Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia: This problem was inspired by this original tweet by Max Howell: > Google: 90%
leetcode 【LeetCode】225. Implement Stack using Queues 问题描述 Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Get the top
leetcode 【LeetCode】223. Rectangle Area Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defined by its bottom left corner and top right corner as shown in the figure. Rectangle Area
leetcode 【LeetCode】219. Contains Duplicate II 问题描述 Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute
leetcode 【LeetCode】217. Contains Duplicate 问题描述 Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false
leetcode 【LeetCode】205. Isomorphic Strings 问题描述 Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a character must
leetcode 【LeetCode】204. Count Primes 问题描述 Description: Count the number of prime numbers less than a non-negative number, n. 点击查看问题 [https://leetcode.com/problems/count-primes/] 问题分析 筛选法求素数,参考这篇文章【算法】普通方法和筛选法求素数 [http://www.zgljl2012.com/suan-fa-pu-tong-fang-fa-he-shai-xuan-fa-qiu-su-shu/] ,这道题用普通方法求素数会超时,只能用筛选法。 代码
leetcode 【LeetCode】206. Reverse Linked List 问题描述 Reverse a singly linked list. 问题分析 链表反转问题。从第二个节点开始,不断把next节点加到head前面。 代码 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* p = head; ListNode* q = 0; if(head==0) return 0; while(p->next) { q
leetcode 【LeetCode】203. Remove Linked List Elements 问题描述 Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6 Return: 1
leetcode 【LeetCode】202. Happy Number 问题描述 Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum
设计模式 Java动态代理的异常处理问题 今天在使用Java动态代理时出现了一个很棘手的问题,实现类里抛出了一个自定义异常,但外面捕获不到。 虽然使用printStack可以输出调试信息,但通过getMessage获取不到提示,因为项目需求是捕捉到同一种自定义异常的不同异常情况,通过 getMessage获取异常提示反馈给用户,但因为使用了动态代理所以出现了异常捕获不到的情况。 具体原因是因为我们通过动态代理最终捕获到的异常时经过加工了的,也就是捕获的已不再是最开始我们希望抛出的异常,加工抛出的异常有两种: java.lang.reflect.UndeclaredThrowableException java.lang.reflect.InvocationTargetException 经过实验,最终的解决办法为: 在动态代理的方法执行时捕获异常,然后抛出exception.getCause() 这样,就能抛出你所希望抛出的那个异常里。 try{ method.invoke(fun, args); } catch(
Java 【Java基础】InputStream 、 InputStreamReader和BufferedReader 在Java中,上述三个类经常用于处理数据流,下面介绍一下三个类的不同之处以及各自的用法。 * InputStream : 是所有字节输入流的超类,一般使用它的子类:FileInputStream等,它能输出字节流; * InputStreamReader : 是字节流与字符流之间的桥梁,能将字节流输出为字符流,并且能为字节流指定字符集,可输出一个个的字符; * BufferedReader : 提供通用的缓冲方式文本读取,readLine读取一个文本行, 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。 下面有三个Demo(Demo访问百度主页获取字节流然后输出)来分别说明三个类的作用: -------------------------------------------------------------------------------- * InputStream package 数据流; import java.io.IOException; import java.
nodejs Node.js转化GBK编码 - iconv-lite node当使用node获取GBK编码的数据时,nodejs只支持utf-8,node没有提供转换编码的原生支持,有倒是有一个模块iconv能干这个事,但需要本地方法,VC++库的支持。国外有个大牛写了一个纯粹用Javascript解码的模块:iconv-lite,可以实现编码转换,使用方法如下: var http = require("http"); var iconv = require("iconv-lite"); var url = "http://hq.sinajs.cn/list=sh600595"; var req = http.request(url, function(
nodejs 【Node.js基础篇】(八)安装Express 3.2框架以及ejs模板 Html模板以及路由文件等服务器必备的功能虽然我们都可以自己实现,但在稳定性、可靠性、全面性方面肯定是有所遗漏的,所以,从今天起,Node的学习就进入了框架学习部分。 > 维基百科: 框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说使用别人搭好的舞台来做编剧和表演。 第一个要学习的框架是在Node中被广泛应用的框架——Express。 安装Express 如果你使用的Node开发环境是WebStorm的话,在新建工程的时候可以直接选新建Node工程,它会给你安装好Express框架(但可能模板渲染使用的是jade)。虽然这的确很方便,但还是建议你使用npm包管理工具来安装Express,因为这个工具以后会常用到。我们使用第二个方法安装Express框架,然后使用WebStorm管理文件。 第一步:进入Node的文件夹,打开cmd进入当前页面 输入:npm
nodejs 【Node.js基础篇】(七)Node异步编程之事件发射器 事件发射器是Node里除了回调函数外的另一十分重要的异步编程技术。 在MFC等图形界面编程库中,事件发射器是非常常见的,比如,鼠标点击事件,点击了鼠标后,就会触发鼠标点击后的函数——事件发射器触发事件,并且在事件被触发后处理它们。在Node API组件中,如HTTP服务器、TCP服务器等都被做成了事件发射器,所以掌握事件发射器的编程方法,是非常重要的。 使用on添加监听器 步骤: 1. 声明事件发射器类 2. 创建事件发射器对象 3. 使用on添加事件发射器 4. 使用emit发射事件 //事件发射器类声明 var EventEmitter = require("events").EventEmitter; //创建事件发射器 var
nodejs 【Node.js基础篇】(六)实现如同jsp标签的HTML模板 一、概述 在上一篇中,我们已经可以使用mime类型模块以及文件传输模块为客户端返回任何类型的文件,但目前能返回的只有静态的HTML,css等文件,而jsp等服务器端语言却可以通过<% %>标签来实现java的扩张,根据请求来指定返回给客户端的html,从而只需要有一个html模板,就可以返回无数个html页面,而不用一个一个页面的编写,然后根据请求路由各个HTML。 今天,我们要实现的就是类似jsp这样的html模板文件(当然,远没有jsp那般强大)。首先,得先介绍一下JSON(JavaScript Object Notation) 二、JSON JSON是一种轻量级的数据交换格式,可用来替代xml成为服务端和客户端之间数据交换格式。程序解析起JSON数据来也非常快。下面是JSON的语法和一段示例: * 数据在名称/值对中 * 数据由逗号分隔 * 花括号保存对象 * 方括号保存数组
nodejs 【Node.js基础篇】(五)使用mime模块来响应css、js文件的请求 1.概述 上一篇 [http://www.zgljl2012.com/node-jsji-chu-pian-si-node-jsshi-xian-wen-jian-lu-you-gong-neng/] 中我们实现了客户端的路由请求,包括直接使用js返回内容响应和使用html文件响应,但上一篇 [http://www.zgljl2012.com/node-jsji-chu-pian-si-node-jsshi-xian-wen-jian-lu-you-gong-neng/] 中最后的显示结果只是一个很普通的html文件,不能使用css样式和js文件,今天我们就通过设置响应文件的mime类型来实现不同文件的响应。 文章会先介绍什么是mime类型,然后介绍两种设置mime类型的方法,第一种是通过后缀名判断文件类型,从而进行响应;第二种是使用第三方mime模块进行响应。 示例是在上一篇 [http://www.zgljl2012.com/node-jsji-chu-pian-si-node-jsshi-xian-wen-jian-lu-you-gong-neng/] 的基础上扩展的。 2
nodejs 【Node.js基础篇】(四)Node.js实现文件路由功能 昨天创建的服务器只是在浏览器请求时简单响应了一下,而今天要创建的服务器是可以根据不同的URL请求响应不同的文件,也就是所谓的文件路由:根据不同的文件请求响应不同的“路”。 -------------------------------------------------------------------------------- 第一步:创建文件Luyou.js,在里面声明引用模块的变量和需响应的文件路由 //获取http模块 var http = require("http"); //文件模块 var fs = require('fs'); //主页路由模块,file文件夹里的index.js文件 var index = require('./file/index'); //错误处理文件路径 var error = "./file/