课程链接:https://www.youtube.com/watch?v=FUssRvv6tUk
课程优势
提升抽象思维能力
增强表达能力
节省时间
问题
给一个肯定有元素的 int 数组,用数组来表示一个非负的整数。请写一个函数为这个整数 + 1,且返回结果数组。
例如传入数组 [1,2,3] 返回 [1,2,4]。
我的思路:
暴力的从低位到高位一位位去 + 1 和计算进位
将数组转为一个真正的整数,将整数 + 1,再回带
- 这个想法不靠谱,因为这个整数可能很大,轻松超越整数类型上限
分析
拿到题就先找限值条件,缩小解题方向。
数组肯定有元素,又表示非负整数,所以只需要考虑 0 和正数 + 1 的情况
数组中每个元素只可能是 0 ~ 9 的一位数字
编程题给出的例子一般就两个作用,要么确实是想向你解释题目到底做什么操作,要么就是给你思维定式,把你往沟里带。
解法
static int[] PlusOne(int[] input)
{
// 存储整数的数组的高位存的是个位
for (var i = input.Length-1; i >= 0; i--)
{
if (input[i] == 9)
{
input[i] = 0;
}
else
{
input[i] = input[i] + 1;
return input;
}
}
// 如果执行到这里,说明 input 里面原来都是 9,现在只需在被置零过的 input 前面再加一个 1 就行了
var output = new int[input.Length + 1];
output[0] = 1;
return output;
}
验证
代码写完,还需要使用 corner case 进行测试,用 [0]、[1,2,3]、[9,9,9] 这些数据去验证。