[LeetCode] 257. Binary Tree Paths | 二叉树输出路径

题目来源:LeetCode: 257. Binary Tree Paths

Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1
/ \
2 3
\
5
All root-to-leaf paths are:
[“1->2->5”, “1->3”]

思路

  • 二叉树的遍历:先序遍历,递归调用
  • 解决好走过路径的记录和回退
  • C语言处理字符的操作不太便捷,试着用Python写这道题

时间复杂度:O(n), 空间复杂度O(logn)

[LeetCode] 258 Add Digits | 计算树根

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.

Follow up:
Could you do it without any loop/recursion in O(1) runtime?

思路

最初看到这个题目,觉得迭代加法取余的方式肯定是最low的,分析规律。

  • 最终得到个位数,结果取值范围[0,9]
  • 各位数累加的计算规律:dr(10)=10-9=1, dr(11)=11-9=2
  • 但并不是对九取余的关系,因为mod(n, 9)的取值范围时[0, 8]
  • 可以抽象为dr(n)=mod(n-1,9) + 1

时间复杂度:O(1), 空间复杂度O(1)

  • 各位数累加的计算规律:12345=1x(9999+1)+2x(999+1)+3x(99+1)+4x(9+1)+5=(1x9999+2x999+3x99+4x9)+(1+2+3+4+5)

[LeetCode] 326. Power of Three | 判断数字是否为3的幂

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

思路

  • 循环除3、取余,判定是否3的幂(与题目不建议使用循环、递归的思想不符)
  • math函数,求log3(n),判断是否为整数
  • 转换为3进制,判断是否为10*形式的三进制数

方案2:时间复杂度:O(1), 空间复杂度O(1)

LeetCode 67 Add Binary | 二进制数累加

题目来源:LeetCode:67. Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a = “11”
b = “1”
Return “100”.

思路

  • 类似于大数大数加法操作,逐位进行操作。
  • 每一位字符-‘0’得到的数字,累加后与2比较,来确定进位与否。
  • 最高位的可能位1,或不存在,且只有计算结束时才能确定存在与否,动态分配内存方面应特殊对待。