<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[stonney的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/stonney</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; stonney]]></copyright><item><title><![CDATA[leetcode hot100 最小栈 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/115018347</link><guid>https://blog.youkuaiyun.com/stonney/article/details/115018347</guid><author>stonney</author><pubDate>Fri, 19 Mar 2021 23:46:44 +0800</pubDate><description><![CDATA[题目描述
设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
方法：
辅助栈
在push的时候，如果辅助栈为空或者元素x小于或等于辅助栈的栈顶元素（peek())，则辅助栈也加进该值。
在pop的时候，如果弹出的元素和辅助栈栈顶元素相同（用equals()），则辅助栈也弹出。
top: 返回栈顶元素(peek()]]></description><category></category></item><item><title><![CDATA[leetcode hot100环形链表II java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/115011966</link><guid>https://blog.youkuaiyun.com/stonney/article/details/115011966</guid><author>stonney</author><pubDate>Fri, 19 Mar 2021 17:50:44 +0800</pubDate><description><![CDATA[题目描述
给定一个链表，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。
为了表示给定链表中的环，我们使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。 如果 pos 是 -1，则在该链表中没有环。注意，pos 仅仅是用于标识环的情况，并不会作为参数传递到函数中。
说明：不允许修改给定的链表。
方法：

快慢指针同时从head出发，设快指针走了n圈，因为快指针始终每次都比慢指针多走一步，则相遇时，快指针的路程：a+n(b+c)+b 慢指针的路程：a+b
a+n(b+c)+]]></description><category></category></item><item><title><![CDATA[leetcode hot100环形链表 Java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/115004747</link><guid>https://blog.youkuaiyun.com/stonney/article/details/115004747</guid><author>stonney</author><pubDate>Fri, 19 Mar 2021 14:03:59 +0800</pubDate><description><![CDATA[题目描述
给定一个链表，判断链表中是否有环。
如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，我们使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。 如果 pos 是 -1，则在该链表中没有环。注意：pos 不作为参数进行传递，仅仅是为了标识链表的实际情况。
如果链表中存在环，则返回 true 。 否则，返回 false 。

方法一：
set方法，将访问过的节点都放到set中，如果有重复，则返回true
代码
/**
 * De]]></description><category></category></item><item><title><![CDATA[leetcode hot100二叉树展开为链表 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114830377</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114830377</guid><author>stonney</author><pubDate>Mon, 15 Mar 2021 15:53:23 +0800</pubDate><description><![CDATA[题目描述
给你二叉树的根结点 root ，请你将它展开为一个单链表：
展开后的单链表应该同样使用 TreeNode ，其中 right 子指针指向链表中下一个结点，而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。

这道题是前序遍历的变形，因此，可以对二叉树进行前序遍历，获得各结点被访问到的顺序，然后每个结点的左子树都为空，右子树的根节点为下一个结点
/**
 * Definition for a binary tree node.
 * public class TreeN]]></description><category></category></item><item><title><![CDATA[leetcode hot100 二叉树的层序遍历 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114805515</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114805515</guid><author>stonney</author><pubDate>Sun, 14 Mar 2021 22:23:16 +0800</pubDate><description><![CDATA[题目描述
给你一个二叉树，请你返回其按 层序遍历 得到的节点值。 （即逐层地，从左到右访问所有节点）。

方法:
广度优先搜索BFS: 遍历使用队列数据结构
void bfs(TreeNode root) {
    Queue&lt;TreeNode&gt; queue = new ArrayDeque&lt;&gt;();
    queue.add(root);
    while (!queue.isEmpty()) {
        TreeNode node = queue.poll(); /]]></description><category></category></item><item><title><![CDATA[leetcode hot100不同的二叉搜索树 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114705016</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114705016</guid><author>stonney</author><pubDate>Fri, 12 Mar 2021 20:52:54 +0800</pubDate><description><![CDATA[题目描述
给定一个整数 n，求以 1 … n 为节点组成的二叉搜索树有多少种？
示例:

【注意这道题是求数的数量，并不用把搜索树都列出来，也就是说只需要求出有多少种形状的树】
当n=0时，有一棵树
当n=1时，有一棵树
当n=2时，有两棵树
当n=3时，有5棵树【f(0)*f(2) + f(1)f(1) + f(2)*f(0)】
所以当n=4时，有 f(0)f(3) + f(1)f(2) + f(2)f(1) + f(3)f(0) = 15 + 12 21 + 51 = 14
res[n]  = res[]]></description><category></category></item><item><title><![CDATA[leetcode hot100二叉树的遍历 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114682840</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114682840</guid><author>stonney</author><pubDate>Thu, 11 Mar 2021 23:16:25 +0800</pubDate><description><![CDATA[二叉树的前序遍历 中序遍历 后序遍历
递归法：
前序遍历
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNo]]></description><category></category></item><item><title><![CDATA[leetcode hot100单词搜索 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114647387</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114647387</guid><author>stonney</author><pubDate>Wed, 10 Mar 2021 22:03:01 +0800</pubDate><description><![CDATA[题目描述
给定一个二维网格和一个单词，找出该单词是否存在于网格中。
单词必须按照字母顺序，通过相邻的单元格内的字母构成，其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
board =[ [‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]
给定 word = “ABCCED”, 返回 true
给定 word = “SEE”, 返回 true
给定 word = “ABCB”, 返回 false
方法:]]></description><category></category></item><item><title><![CDATA[leetcode hot100子集 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114523101</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114523101</guid><author>stonney</author><pubDate>Mon, 08 Mar 2021 10:23:15 +0800</pubDate><description><![CDATA[题目描述
给你一个整数数组 nums ，数组中的元素 互不相同 。返回该数组所有可能的子集（幂集）。
方法：回溯
新建一个res队列，作为结果返回
新建一个in队列，用来存储符合条件的子集
每次到一个层，都可以选择是否将该层的数加入队列in
当前层 = 数组的长度时，将in队列加入到res中

代码：
class Solution {
    public List&lt;List&lt;Integer&gt;&gt; subsets(int[] nums) {
        List&lt;List&l]]></description><category></category></item><item><title><![CDATA[leetcode hot100颜色分类 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114500762</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114500762</guid><author>stonney</author><pubDate>Sun, 07 Mar 2021 22:22:53 +0800</pubDate><description><![CDATA[题目描述
给定一个包含红色、白色和蓝色，一共 n 个元素的数组，原地对它们进行排序，使得相同颜色的元素相邻，并按照红色、白色、蓝色顺序排列。
此题中，我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
输入：nums = [2,0,2,1,1,0]
输出：[0,0,1,1,2,2]
方法：
双指针：
指针left指向数组第一个数，right指向数组最后一个数
遍历数组，将值为2的元素放到最后，如果当前元素值为0，则置于前面
class Solution {
    public void sortC]]></description><category></category></item><item><title><![CDATA[leetcode hot100爬楼梯 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114439836</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114439836</guid><author>stonney</author><pubDate>Sat, 06 Mar 2021 14:16:50 +0800</pubDate><description><![CDATA[题目描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
注意：给定 n 是一个正整数。
思路:
用f(x)表示爬到第x阶的方案数
f(1) = 1
f(2) = 2
f(3) =  3
f(4) = 5
f(5) = 8
…
f(n) = f(n-1)+f(n-2)
初始化f(0) = 1 f(1) = 1
代码：
class Solution {
    public int climbStairs(int n) {
       ]]></description><category></category></item><item><title><![CDATA[leetcode hot100最小路径和 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114438266</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114438266</guid><author>stonney</author><pubDate>Sat, 06 Mar 2021 13:36:34 +0800</pubDate><description><![CDATA[题目描述
给定一个包含非负整数的 m x n 网格 grid ，请找出一条从左上角到右下角的路径，使得路径上的数字总和为最小。
说明：每次只能向下或者向右移动一步。

输入：grid = [[1,3,1],[1,5,1],[4,2,1]]
输出：7
解释：因为路径 1→3→1→1→1 的总和最小。
思路：
创建二维数组arr， 与原始网格大小相同，arr[i][j]表示从左上角到(i,j)的最小路径和。
arr[0][0] = grid[0][0]
其余位置：

第一行：arr[0][j] = arr[0]]]></description><category></category></item><item><title><![CDATA[leetcode hot100不同路径 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114436470</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114436470</guid><author>stonney</author><pubDate>Sat, 06 Mar 2021 12:32:55 +0800</pubDate><description><![CDATA[题目描述
一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为 “Start” ）。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为 “Finish” ）。
问总共有多少条不同的路径？

思路：
由于每次只能向下或者向右移动一步，所以要想走到（i,j),如果是向下走一步，则会从(i-1,j)走来，如果是向右走一步，则会从(i,j-1)走来
设f(i,j）表示从左上角走到(i,j)的路径数量
则f(i,j) = f(i-1,j)+f(i,j+1)
特别地，第一行]]></description><category></category></item><item><title><![CDATA[leetcode hot100合并区间 Java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114416946</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114416946</guid><author>stonney</author><pubDate>Fri, 05 Mar 2021 22:22:59 +0800</pubDate><description><![CDATA[题目描述
以数组 intervals 表示若干个区间的集合，其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间，并返回一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间。
思路：

如果数组的长度为0或者1，则直接返回该数组
初始化count用于计数合并了多少次
遍历数组，相邻两个元素intervals[i]和intervals[j]，如果 intervals[i][1] &gt;= intervals[j][0] &amp;&amp; interval]]></description><category></category></item><item><title><![CDATA[设计模式——状态模式（java)]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114212610</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114212610</guid><author>stonney</author><pubDate>Sun, 28 Feb 2021 12:21:19 +0800</pubDate><description><![CDATA[情景：互联网公司加班，程序根据不同的时间判断程序员不同的状态。
面向过程的代码：
package state;

public class state {
    static int hour = 0;
    static boolean workfinished = false;
    public static void writeprogram(){
        if(hour &lt;12){
            System.out.println("当前时间："+hour+"上午工]]></description><category></category></item><item><title><![CDATA[设计模式——抽象工厂模式（java实现）]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114198754</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114198754</guid><author>stonney</author><pubDate>Sun, 28 Feb 2021 10:51:08 +0800</pubDate><description><![CDATA[情景：
项目原先是基于sql server数据库，后来要改为access数据库，需要的改动很多。
最基本的数据访问程序，实现新增用户和得到用户
用户类：
package abstractfactory;

public class User {
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
      ]]></description><category></category></item><item><title><![CDATA[leetcode hot100 字母异位词分组 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/114122221</link><guid>https://blog.youkuaiyun.com/stonney/article/details/114122221</guid><author>stonney</author><pubDate>Fri, 26 Feb 2021 12:21:49 +0800</pubDate><description><![CDATA[题目描述
字母异位词分组
给定一个字符串数组，将字母异位词组合在一起。字母异位词指字母相同，但排列不同的字符串。
示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
方法：
新建一个哈希表map，哈希表的键为一组字母异位词的标志，哈希表的值为一组字母异位词列表。
由于互为字母异位词的两个字符串包含的字母是相同的，因此对两个字符串分别排序后得到的字符串是相同]]></description><category></category></item><item><title><![CDATA[leetcode hot100旋转图像 Java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/113900730</link><guid>https://blog.youkuaiyun.com/stonney/article/details/113900730</guid><author>stonney</author><pubDate>Sat, 20 Feb 2021 23:05:01 +0800</pubDate><description><![CDATA[题目描述
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像，这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

方法一【使用另外一个矩阵】
观察可知，第一行第x个 旋转到 倒数第一列第x个，第二行第x个 旋转到 倒数第二列第x个，第三行第x个旋转到倒数第三列第x个
【由于第一行和最后一列有重合的地方，如果原地旋转，会覆盖，所以需要使用另外一个矩阵】
代码：
class Solution {
    public ]]></description><category></category></item><item><title><![CDATA[leetcode hot100 全排列 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/113809591</link><guid>https://blog.youkuaiyun.com/stonney/article/details/113809591</guid><author>stonney</author><pubDate>Sun, 14 Feb 2021 18:01:03 +0800</pubDate><description><![CDATA[题目描述
给定一个 没有重复 数字的序列，返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
方法：
回溯：回溯的本质是穷举，穷举整棵决策树是不可避免的，所以缺点是复杂度很高。

比如【1，2，3】
先固定1，再固定2，此时第三位是3
然后第一位仍固定1，再固定3，此时第三位是2
然后再改变第一位，依次执行。
class Solution {
    public List&lt;]]></description><category></category></item><item><title><![CDATA[leetcode hot100 组合总和 java]]></title><link>https://blog.youkuaiyun.com/stonney/article/details/113794233</link><guid>https://blog.youkuaiyun.com/stonney/article/details/113794233</guid><author>stonney</author><pubDate>Fri, 12 Feb 2021 16:43:03 +0800</pubDate><description><![CDATA[题目描述
给定一个无重复元素的数组 candidates 和一个目标数 target ，找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
方法：
递归：
终止条件：candidates数组被全部用完 或者 target &lt;= 0
每次可以选择跳过当前的数，即dfs(i+1)，也可以选择使用当前的数,即dfs(i)
因为每个数字都可以被无限制地重复使用，所以搜索的下标仍为i

代码：
class Solution {
    ]]></description><category></category></item></channel></rss>