每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西!
Algorithm: 学习算法
题目:https://leetcode.com/problems/zigzag-conversion/
解题过程:
刚开始没看懂什么意思,看了两遍,明白是把字符串从上至下按照锯齿形排列,然后按行输出。 根据题目提示可以继续做一下延伸,把1-20 按 n=5 自己排列一下。
这种题一般有规律,找出要打印的字符在字符串里的下标,收集在一起就是结果了。
规律就是,同一行中 不同纵列里的数字间隔是2*n - 2(以n=5为例,2*n - 2 = 8 = 9-1 = 17-9 )。从第二行开始,每两个纵列之间隔一个数字,假定行数为i,该数字与前一个数字的interval 为 i+2*n-2-2(i-1) (第三行,i=3,n=5, 3+2*5-2-2(3-1) = 7)。
这里有两种循环规则,第二种依赖于第一种。我们用两遍循环去输出,第一层是按 i 行遍历,第二层是从 i 开始,间隔 2*n - 2 ,遍历。第二层循环里面寻找与 i 间隔 i+2*n-2-2(i-1) 的数。
另外一个小技巧,使用StringBuilder来拼接字符串。
解法:https://raw.githubusercontent.com/chy996633/leetcode/be515a6a088de4f0e882ccb4fc7cd9e1fcf5464d/src/ZigZagConversion.java
public class ZigZagConversion { public String convert(String s, int numRows) { if (numRows <= 1) return s; if (numRows == s.length()) return s; StringBuilder res = new StringBuilder(); int x = 2 * numRows - 2; for (int i=0;i<numRows;i++) { for(int j=i;j<s.length();j +=x){ res.append(s.charAt(j)); int y = j + x - 2 * i; if (i != 0 && i != numRows-1 && y < s.length()) res.append(s.charAt(y)); } } return res.toString(); } }
Review: 学习英文
题目:微服务文章 - Smart endpoints and dumb pipes
内容概述:这节没有太读懂,大意是微服务架构在终端是解耦 和 有凝聚力的,单个服务对外的通信基于轻量级机制,一般是基于HTTP协议 或 RESTful API。通信机制应当尽可能dumb,终端尽可能smart。
Stress 作为动词有强调之意。fabric 有布料/结构之意。fine-grained 细粒度。coarser-grained 粗粒度。
Tips: 知识点
Java中 @Transient 这个注解在Hibernate中用于标注不需要作持久化操作的字段。如果字段没有标注@Transient ,Hibernate会默认进行持久化,这时如果数据库表没有相应字段就会报错。
Share: 价值观
人生的结果 = 思维方式 * 热情 * 能力。 努力发展出看问题的不同角度,专注并且投入热情,加上能力,就可以做出好的结果。