课程链接:https://www.youtube.com/watch?v=FUssRvv6tUk

课程优势

  1. 提升抽象思维能力

  2. 增强表达能力

  3. 节省时间

问题

给一个肯定有元素的 int 数组,用数组来表示一个非负的整数。请写一个函数为这个整数 + 1,且返回结果数组。
例如传入数组 [1,2,3] 返回 [1,2,4]。

我的思路:

  1. 暴力的从低位到高位一位位去 + 1 和计算进位

  2. 将数组转为一个真正的整数,将整数 + 1,再回带

    1. 这个想法不靠谱,因为这个整数可能很大,轻松超越整数类型上限

分析

拿到题就先找限值条件,缩小解题方向。

  1. 数组肯定有元素,又表示非负整数,所以只需要考虑 0 和正数 + 1 的情况

  2. 数组中每个元素只可能是 0 ~ 9 的一位数字

编程题给出的例子一般就两个作用,要么确实是想向你解释题目到底做什么操作,要么就是给你思维定式,把你往沟里带。

解法

  1. static int[] PlusOne(int[] input)
  2. {
  3. // 存储整数的数组的高位存的是个位
  4. for (var i = input.Length-1; i >= 0; i--)
  5. {
  6. if (input[i] == 9)
  7. {
  8. input[i] = 0;
  9. }
  10. else
  11. {
  12. input[i] = input[i] + 1;
  13. return input;
  14. }
  15. }
  16. // 如果执行到这里,说明 input 里面原来都是 9,现在只需在被置零过的 input 前面再加一个 1 就行了
  17. var output = new int[input.Length + 1];
  18. output[0] = 1;
  19. return output;
  20. }

验证

代码写完,还需要使用 corner case 进行测试,用 [0]、[1,2,3]、[9,9,9] 这些数据去验证。