2022年2月28日
支持不同格式之间的转换 支持图片像素的压缩以及拉长 package main import ( "bytes" "errors" "fmt" "image" "image/jpeg" "image/png" "io/ioutil" "os" "golang.org/x/image/draw" _ "golang.org/x/image/webp" // for RegisterFormat ) type imageHelper struct { img image.Image fileName string format string scale draw.Scaler } func NewImageHelper(fileName string, scale ...draw.Scaler) *imageHelper { var s draw.Scaler if scale == nil { s = draw.ApproxBiLinear } else { s = scale[0] } return &imageHelper{ fileName: fileName, scale: s, } } func (r *imageHelper) GuessFileFormat() (string, error) { if r.……
阅读全文
2021年12月15日
package main import ( "fmt" "github.com/coreos/pkg/progressutil" "io" "os" "path/filepath" "time" ) func combineMultipleFiles(outPutFile string, files ...string) { abs, err := filepath.Abs(outPutFile) if err != nil { panic("can not get outPutFile absolute path") } dir := filepath.Dir(abs) if _, err := os.Stat(dir); err != nil { if os.IsNotExist(err) { err := os.MkdirAll(dir, os.ModePerm) if err != nil { panic(fmt.Sprintf("can not mkdirs, path: %s, err: %s", dir, err)) } } } file, err := os.……
阅读全文
2021年12月9日
使用快排的思想 空间复杂度很垃圾, 只是为了更好的理解快排算法 TODO 修改成不需要额外空间的算法 def quicksort(data: list): if len(data) <= 1: return data less = [] more = [] pivot = data[0] for item in data: if item < pivot: less.append(item) elif item > pivot: more.append(item) return quicksort(less) + [pivot] + quicksort(more) data = [1, 4, 2, 6, 3, 10, 12, 11] print(quicksort(data)) ……
阅读全文
2021年12月8日
class Node: def __init__(self, val, left=None, right=None) -> None: self.val = val self.left = left self.right = right def create_tree(data: list): if not data: return None first_node = Node(data[0]) tmp_list = [first_node] tmp_count = 0 for item in data[1:]: node = tmp_list[0] new_node = Node(item) if item is not None else None if tmp_count == 0: node.left = new_node # add to tmp_list if item is not None: tmp_list.append(new_node) tmp_count += 1 continue if tmp_count == 1: node.……
阅读全文
2021年11月24日
from enum import Enum class Gender(Enum): male = 0 female = 1 print(Gender(0)) # Gender.male print(Gender(0).name) # female print(Gender(0).value) # 0 class EnumWithLabel(Enum): """ 允许带 label 的枚举类型, 参考: https://docs.python.org/zh-cn/3/library/enum.html#when-to-use-new-vs-init """ def __new__(cls, value, label): obj = object.__new__(cls) obj._value_ = value obj.label = label return obj class GenderWithLabel(EnumWithLabel): male = (0, "MAN") female = (1, "WOMAN") print(GenderWithLabel(0)) # GenderWithLabel.male print(GenderWithLabel(0).value) # 0 print(GenderWithLabel(0).label) # MAN class EnumWithDefault(Enum): """ 允许返回默认值的枚举类型, 不存在枚举值时不会报错 如果需要修改默认值则需要覆盖 new_default_obj 函数 """ @classmethod def _missing_(cls, value): new_member = cls.……
阅读全文
2021年11月19日
package main import ( "encoding/json" "fmt" "github.com/go-playground/locales/en" "github.com/go-playground/locales/zh" "github.com/go-playground/locales/zh_Hant_TW" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" entranslations "github.com/go-playground/validator/v10/translations/en" zhtranslations "github.com/go-playground/validator/v10/translations/zh" zhtwtranslations "github.com/go-playground/validator/v10/translations/zh_tw" "reflect" "strings" ) type InternalAccountTransferRequest struct { Name string `json:"name" binding:"required"` Age string `json:"age_test" binding:"required"` Class string `binding:"required"` } func main() { s := `{"name": "123"}` var requset InternalAccountTransferRequest json.Unmarshal([]byte(s), &requset) //requset.Class = "123" v := validator.New() var err error uni := ut.New(en.New(), en.New(), zh_Hant_TW.New(), zh.New()) zh_, _ := uni.GetTranslator("zh") zhtranslations.RegisterDefaultTranslations(v, zh_) tw_, _ := uni.……
阅读全文
2021年11月17日
Python 版本 (venv) ➜ python --version Python 3.8.2 安装 brew install mysql export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" pip install mysqlclient brew uninstall mysql ……
阅读全文
2021年10月19日
git log -p | grep 'xxx' -B 300 // 查询修改历史 git push origin branch_name // 推送 git commit -m "commit_message" // 提交 commit git add -A . // add 文件 ……
阅读全文
2021年10月15日
if…else 最常见的 else if 1 > 0: pass else: pass for else for 循环中 只有 for 循环结束了才执行, 注意空循环也会执行 for i in range(3): print(i) else: print("end") # 0 # 1 # 2 # end for i in range(3): print(i) if i == 1: break else: print("end") # 0 # 1 try… else 这个就很好理解了, else 只会在 try 未发生任何异常的时候执行 finally 在所有状态下都会执行 try: 1 except Exception as e: print(e) else: print("else") finally: print("finally") # else # finally try: 1/0 except Exception as e: print(e) else: print("else") finally: print("finally") # division by zero # finally ……
阅读全文
2021年10月14日
二叉树 本文摘自 代码随想录
定义 满二叉树 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。
国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
满二叉树的结点要么是叶子结点,度为0,要么是度为2的结点,不存在度为1的结点。
但是, 下图根据国内定义就不是一个满二叉树 满二叉树 百度百科
完全二叉树 一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树
完全二叉树
二叉搜索树 一个有序树 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉排序树
平衡二叉搜索树 AVL (Adelson-Velsky and Landis) 空树 左右两个子树高度绝对值不超过1 (<=1), 并且两个子树都是 AVL 存储方式 顺序, 数组 链式, 指针方式 链式: 顺序: 遍历 如果父节点的数组下表是i,那么它的左孩子就是i * 2 + 1,右孩子就是 i * 2 + 2。 注意: 常用的还是链式……
阅读全文
-
上一页
-
1
-
2
-
3
-
4
-
下一页