LeetCode 加一

解题思路,首先判断数字的最后一个数是否为9,依次遍历,并且用一个carry标记是否进位,0表示不进位1表示进位,用number表示当前遍历的下标,如果是为9就直接将该下标赋值为0,并且将carry赋值为1,继续遍历下一位,直到当前数字不为9就直接将标记carry置为0,并且break结束for循环。

在for循环结束之后再判断carry是否为1,如果是1并且number下标为0,就说明格式类似:999。那么就直接将数组存入一个新的并且长度大1的数组,第一位置为1,其余位数全部为0。如果carry是0,则直接将遍历最后的那个下标number的值取出来加一。


		var carry = 0 // 进位标记
		var accessIndex = mArray.size - 1 // 访问的下标
		// 如果最后一位数是9
		for (i in mArray) {
			if (mArray[accessIndex] == 9) {
				carry = 1
				mArray[accessIndex] = 0
				if (accessIndex > 0) {
					accessIndex--;
				}else{
					break
				}
			} else {
				carry = 0
				break
			}
		}
		if (carry == 1 && accessIndex == 0) {
			// 遍历完了还是有进位的标记,就是数组中的所有元素都是9,类似9999,就需要创建新的数组存放,首位为1
			var newIntArray: IntArray = IntArray(mArray.size+1)
			for (i in 0..(mArray.size)) {
				if (i == 0) {
					newIntArray[i] = 1
				} else {
					print(i)
					newIntArray[i] = 0
				}
			}
			return newIntArray
		} else {
			mArray[accessIndex] += 1
			return mArray
		}



你可能感兴趣的:(LeetCode)