每周一道算法、点评一篇英文技术文章、学习一个技术技巧、分享一个技术观点和思路
Problem: ZigZag Conversion
定义一个二维数组,记录字符串的走势
class Solution { public String convert(String s, int numRows) { int length = s.length(); if (length < numRows || numRows < 2) { return s; } int[][] ints = new int[numRows][length]; int j = 0, incr = 1; for (int i = 0; i < length; i++) { ints[j][i] = 1; if (j == 0) { incr = 1; } if (j == numRows - 1) { incr = -1; } j += incr; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < numRows; i++) { for (int k = 0; k < length; k++) { if (ints[i][k] == 1) { sb.append(s.charAt(k)); } } } return sb.toString(); } }
一行一行的访问。
class Solution { public String convert(String s, int numRows) { if (numRows == 1) { return s; } StringBuilder sb = new StringBuilder(); int length = s.length(); int cycleLen = 2 * numRows - 2;// 头尾只有一个 for (int i = 0; i < numRows; i++) { for (int currentCycle = 0; currentCycle + i < length; currentCycle += cycleLen) { sb.append(s.charAt(currentCycle + i)); //不是头尾两行的情况,同一个周期里面,有两个值在同一行 if (i != 0 && i != numRows - 1 && currentCycle + cycleLen - i < length) sb.append(s.charAt(currentCycle + cycleLen - i)); } } return sb.toString(); } }
最近看了《编程珠玑》,果然经典的书就是经典,值得一看,且得多看几遍。
虽然只看了前面几章,但是给我了不少的启发。
编程时,需要明确问题、找到合适的数据结构和算法、使用简单的设计。
而这需要扎实的基础,尽量的压榨每一个字节,所以夯实基础是重点,这也是我一直的目标。
现在使用 Spring Boot 写一个 Filter
很简单,实现 javax.servlet.Filter
再加上 @WebFilter
注解,通过 urlPatterns
配置 Filter
的应用范围。还可以通过 @Order
指定顺序。最后加上 @ServletComponentScan
扫描这个 Filter
。
我在配置 urlPatterns
遇到一个坑,就是使用 /**
是无效的,只有 *
。
/order/*
表示以 /order/
开始的 URL。
/*.do
表示以 .do
结尾的 URL。
注意: urlPatterns
中的字符串除了 *
都是全匹配(大小写,长度)。
最近遇到了一些事情,发现自己的心态炸了,太容易被别人点燃了。得好好地控制心态,这又是一门得好好锻炼的事情。为人处世还是挺重要的,要做一个高情商的人。有时还得学习下阿Q精神。
暂时的办法是,不要被别人的情绪影响,在气头上的时候,冷静下来,也尽量用诙谐幽默的话让对方也冷静下来,脸皮厚一点。
二是控制自己的脾气,控制语气,不要把负面情绪传递给别人。