<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[下个路口见_20的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Somnus_k</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Somnus_k]]></copyright><item><title><![CDATA[企业出海第一步：国际化和本地化]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/150656009</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/150656009</guid><author>Somnus_k</author><pubDate>Sun, 24 Aug 2025 17:31:01 +0800</pubDate><description><![CDATA[企业出海第一步，本地化适配]]></description><category></category></item><item><title><![CDATA[leetcode股票买卖问题【六连杀】]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/111405513</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/111405513</guid><author>Somnus_k</author><pubDate>Sat, 19 Dec 2020 16:24:55 +0800</pubDate><description><![CDATA[一次交易，找到买点最低，卖点最高即可。但限制条件是：卖点必须在买点之后。

所以很适合栈来操作，遇到比栈顶小的元素，就入栈，否则，将当前元素减去栈顶元素，然后不断更新最大值即可。


class Solution {
    public int maxProfit(int[] prices) {
        if (prices == null || prices.length == 0){
            return 0;
        }
        Deque&lt;Inte..]]></description><category></category></item><item><title><![CDATA[Logback日志名和日志内容配置增加ip等信息]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/102871048</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/102871048</guid><author>Somnus_k</author><pubDate>Sat, 02 Nov 2019 14:12:47 +0800</pubDate><description><![CDATA[Logback日志名和日志内容配置增加ip等信息
最近线上有个需求，将每个服务的多个实例打出的日志在日志名称和内容里增加ip信息，首先当然是先百度(Google)一下，看看实现方式。
日志内容里增加ip信息

创建一个类继承自ch.qos.logback.classic.pattern.ClassicConverter
重写convert()方法，在该方法内返回ip信息

public class...]]></description><category></category></item><item><title><![CDATA[JWT授权访问API]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/100855572</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/100855572</guid><author>Somnus_k</author><pubDate>Sun, 15 Sep 2019 15:30:32 +0800</pubDate><description><![CDATA[对于一个项目来说，里面的API接口会有很多，但通常都是需要授权访问的，常见的做法之一是通过用户登录判断用户身份的合法性，然后利用用户信息生成token，以后带着token来访问接口，而生成token的方式之一就是jwt（JSON Web Token）。

关于JWT的含义和结构，网上介绍很多，不再赘述。可以参考：https://jwt.io/introduction/。这里只做一个简...]]></description><category></category></item><item><title><![CDATA[linux 下sh命令：command not found]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/87980168</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/87980168</guid><author>Somnus_k</author><pubDate>Wed, 27 Feb 2019 17:02:17 +0800</pubDate><description><![CDATA[1.使用cat -A 文件名 查看文件中是否存在特殊字符；

2.本次出现的问题主要在于每行结尾处存在^M特殊字符，比如：#!/bin/sh^M$，解决方法是：

使用vi打开文本文件 
vi test.sh
命令模式下输入


    :set fileformat=unix 
    :wq

3.然后再使用sh命令执行文件就正常了。 ...]]></description><category></category></item><item><title><![CDATA[leetcode73：Set Matrix Zeroes]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82835242</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82835242</guid><author>Somnus_k</author><pubDate>Tue, 25 Sep 2018 10:11:02 +0800</pubDate><description><![CDATA[



思路：使用常量的额外空间，肯定是要用数组的某一部分来记录0的位置，所以考虑采用第0行和第0列来记录（1，1）--&amp;gt;（n，n）中0的位置，因为之后第0行和第0列的值会改变，所以需要提前判断0行0列是否有0，最后做处理。

代码：


public class SetMatrixZeroes {

	public static void main(String[] args) {
		i...]]></description><category></category></item><item><title><![CDATA[leetcode72：Edit Distance]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82829742</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82829742</guid><author>Somnus_k</author><pubDate>Mon, 24 Sep 2018 16:11:39 +0800</pubDate><description><![CDATA[

思路：设dp[i][j]表示word1中0-i个字符转换成word2中0-j个字符需要的最少次数，先对0行和0列所有元素进行初始化，然后从1行1列开始往后递推，最终将dp数组填充满，dp[row][col]即为最终结果。

状态转移方程为：

if(word1[i]==word2[j]):

dp[i][j]=dp[i-1][j-1];

else:

dp[i][j]=Math.min(dp...]]></description><category></category></item><item><title><![CDATA[leetcode70:Climbing Stairs]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82829174</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82829174</guid><author>Somnus_k</author><pubDate>Mon, 24 Sep 2018 14:45:32 +0800</pubDate><description><![CDATA[

思路：设f(n)为从1爬到第n层台阶的走法，则f(n)=f(n-1)+f(n-2)。

代码：


public class ClimbingStairs {

	public static void main(String[] args) {

		System.out.println(climbStairs2(44));
	}
	
	public static int climbStair...]]></description><category></category></item><item><title><![CDATA[leetcode67:Add Binary]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82824872</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82824872</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 20:59:58 +0800</pubDate><description><![CDATA[

思路：从右边开始，逐位相加，包括进位。

代码：


public class AddBinary67 {

	public static void main(String[] args) {
//		System.out.println(addBinary(&quot;11&quot;, &quot;1&quot;));
		System.out.println(addBinary(&quot;1&quot;, &quot;111&quot;));
	}

	publi...]]></description><category></category></item><item><title><![CDATA[leetcode66:Plus One]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82824649</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82824649</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 20:29:40 +0800</pubDate><description><![CDATA[

思路：从后往前加，记录进位即可，但需要考虑各位全为9的情况，这样高位进位，需要将数组长度增加1个位置，这种情况出现的概率比较低，所以如果高位有进位，新开一个数组将原来计算的结果保存进去即可。...]]></description><category></category></item><item><title><![CDATA[leetcode64:Minimum Path Sum]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82824457</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82824457</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 20:06:35 +0800</pubDate><description><![CDATA[

思路：跟之前走方格的题差不多，只是状态转移方程稍微改变一下。dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];。

代码：


public class MinimumPathSum64 {

	public static void main(String[] args) {

//		int[][] num = { { ...]]></description><category></category></item><item><title><![CDATA[leetcode63:Unique Paths II]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82824025</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82824025</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 18:57:14 +0800</pubDate><description><![CDATA[

思路：在Unique Paths上多加了一些障碍点，做法同Unique Paths类似，只是在初始化和计算dp[i][j]的时候，需要判断i行j列是否为障碍点，如果是，表示路径不通，置为0，否则正常计算。dp[i][j]=dp[i - 1][j] + dp[i][j - 1]。

代码：


public class UniquePathsII63 {

	public static void...]]></description><category></category></item><item><title><![CDATA[leetcode56:Merge Intervals]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82822929</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82822929</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 18:30:12 +0800</pubDate><description><![CDATA[

思路：典型的区间合并问题，笔试中也经常遇到，可以将区间先进行排序，然后按顺序对能合并的区间进行合并即可，需要注意的是最后一个区间，如果不能和之前的区间进行合并，最后一个区间就会被遗漏，这里的做法是添加一个辅助结尾区间，intervals.add(new Interval(Integer.MAX_VALUE, Integer.MAX_VALUE));这样最后一个有效区间就能进行处理了。


cl...]]></description><category></category></item><item><title><![CDATA[leetcode55:Jump Game]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82822562</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82822562</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 15:46:22 +0800</pubDate><description><![CDATA[

思路：遍历数组，并将当前位置能到达的位置全部置为true，遍历完成后后检查最后一个位置是否为true即可。

代码：


public static void main(String[] args) {

//		int num[] ={2,3,1,1,4};
//		int num[] ={3,2,1,0,4};
		int num[] ={2,3,1,1,4};
		System.out....]]></description><category></category></item><item><title><![CDATA[【面试题】leetcode62:Unique Paths]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82822286</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82822286</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 15:13:02 +0800</pubDate><description><![CDATA[

瓜子面试题

思路：动态规划求解即可。

代码：


public class UniquePaths62 {

	public static void main(String[] args) {

		System.out.println(uniquePaths(7, 3));
	}

	public static int uniquePaths(int m, int n) {

		int...]]></description><category></category></item><item><title><![CDATA[leetcode50:Pow(x, n)]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82820271</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82820271</guid><author>Somnus_k</author><pubDate>Sun, 23 Sep 2018 10:02:53 +0800</pubDate><description><![CDATA[

思路：直接用循环来做，会提示超时。我们可以用递归来折半计算，每次把n缩小一半，这样n最终会缩小到0，任何数的0次方都为1，这时候我们再往回乘，如果此时n是偶数，直接把上次递归得到的值算个平方返回即可，如果是奇数，则还需要乘上个x的值。还有一点需要引起我们的注意的是n有可能为负数，对于n是负数的情况，我们可以先用其绝对值计算出一个结果再取其倒数即可。

参考：http://www.cnblogs...]]></description><category></category></item><item><title><![CDATA[leetcode49：Group Anagrams]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82814992</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82814992</guid><author>Somnus_k</author><pubDate>Sat, 22 Sep 2018 19:07:17 +0800</pubDate><description><![CDATA[

思路：这道题让我们群组给定字符串集中所有的错位词，所谓的错位词就是两个字符串中字母出现的次数都一样，只是位置不同，比如abc，bac, cba等它们就互为错位词，那么我们如何判断两者是否是错位词呢，我们发现如果把错位词的字符顺序重新排列，那么会得到相同的结果，所以重新排序是判断是否互为错位词的方法，由于错位词重新排序后都会得到相同的字符串，我们以此作为key，将所有错位词都保存到map中，然后...]]></description><category></category></item><item><title><![CDATA[【面试题】leetcode48:Rotate Image]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82814728</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82814728</guid><author>Somnus_k</author><pubDate>Sat, 22 Sep 2018 18:43:51 +0800</pubDate><description><![CDATA[

瓜子二面面试题

思路：主要找到旋转前后下标之间的对应关系，matrix[j][n-1 - i] = matrix[i][j]，但是在遍历过程中原数组被改变了，所以需要提前将原数组拷贝一份。

代码：


public class RotateImage48 {

	public static void main(String[] args) {
		int[][] num = { { 1, ...]]></description><category></category></item><item><title><![CDATA[leetcode47:Permutations II]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82814431</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82814431</guid><author>Somnus_k</author><pubDate>Sat, 22 Sep 2018 18:08:29 +0800</pubDate><description><![CDATA[

思路：依然采用dfs+交换，多了去重步骤。

代码：


public class PermutationsII {

	public static void main(String[] args) {

		int[] num= {1,1,2};
		System.out.println(permute(num));
	}

	public static List&amp;lt;List&amp;lt;In...]]></description><category></category></item><item><title><![CDATA[leetcode46:Permutations]]></title><link>https://blog.youkuaiyun.com/Somnus_k/article/details/82813866</link><guid>https://blog.youkuaiyun.com/Somnus_k/article/details/82813866</guid><author>Somnus_k</author><pubDate>Sat, 22 Sep 2018 16:59:36 +0800</pubDate><description><![CDATA[

思路：排列问题，深度搜索+交换。

代码：


public class Permutations46 {

	public static void main(String[] args) {

		int[] num= {1,2,3};
		System.out.println(permute(num));
	}

	public static List&amp;lt;List&amp;lt;Integer...]]></description><category></category></item></channel></rss>