算法:加一
13122256420
641
2024-02-26
给定一个正整数组成的数据,在数组最高位加一

输入:[1,2,3] 输出:[1,2,4]

输入:[9,9,9] 输出:[1,0,0,0]

js版
// let a = [1, 2, 3]
let a = [9, 9, 9]
console.log(plus_one(a))

function plus_one(digits) {
    let i = digits.length - 1
    while (true) {
        // 尾数小于 9 直接 + 1 返回
        if (digits[i] < 9) {
            digits[i] += 1;
            return digits
        }

        // 等于9 就置为0
        // 如果一直是 9 就一直 值为 0 最后 i等于0 跳出循环
        digits[i] = 0
        if (i > 0) {
            i -= 1
        } else if (i === 0) {
            break
        }
    }
    let a = new Array(digits.length +1 )
    a.fill(0)
    a[0] = 1
    return a
}
go版
	fmt.Println("加一前", arr1)
	fmt.Println(plus_one(arr1))
func plus_one(arr [3]int) any {
	i := len(arr) - 1
	for true {
		// 小于9 就 加一 直接返回
		if arr[i] < 9 {
			arr[i] += 1
			return arr
		}
		// 等于 9 就置为0 下一个数继续
		// 如果都是 9 就全部置为0
		arr[i] = 0
		if i > 0 {
			i -= 1
		} else if i == 0 {
			break
		}
	}
	ints := [len(arr) + 1]int{}
	ints[0] = 1
	fmt.Println(i)
	return ints
}
rust版本
    let mut vec1 = vec![9, 9, 9];
    println!("{:?} --- 1, 2, 1", plus_one(vec1));
fn plus_one(mut vec1: Vec<i32>) -> Vec<i32> {
    let mut i = vec1.len() - 1;

    loop {
        if vec1[i] < 9 {
            vec1[i] += 1;
            return vec1;
        }

        vec1[i] = 0;
        if i > 0 {
            i -= 1;
        } else if i == 0 {
            break;
        }
    }
    vec1 = vec![0; vec1.len() + 1];
    vec1[0] = 1;
    return vec1;
}