每周学算法/读英文/知识点心得分享 2.4

 每周一个 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: 价值观

人生的结果 = 思维方式 * 热情 * 能力。 努力发展出看问题的不同角度,专注并且投入热情,加上能力,就可以做出好的结果。

原文地址:https://www.cnblogs.com/andrew-chen/p/10361840.html