这是六则或许对你有些许帮助的信息:

1、阿秀在工作之余开发了一个编程资源网站,目前已经收集了很多不错的学习资源和黑科技(附带下载地址),如你有意欢迎体验以及推荐自己认为不错的资源,众人拾柴火焰高,我为人人,人人为我🔥!

2、👉23年5月份我从字节跳动离职跳槽到某外企期间,为方便自己找工作,增加上岸几率,我自己从0开发了一个互联网中大厂面试真题解析网站,包括两个前端和一个后端。能够定向查看某些公司的某些岗位面试真题,比如我想查一下行业为互联网,公司为字节跳动,考察岗位为后端,考察时间为最近一年之类的面试题有哪些?

网站地址:InterviewGuide大厂面试真题解析网站。点此可以查看该网站的视频介绍:B站视频讲解 如果可以的话求个B站三连,感谢!

3、😊 分享一个学弟发给我的20T网盘资源合集点此白嫖,主要是各类高清影视、电视剧、音乐、副业、纪录片、英语四六级考试、考研考公等资源。

4、😍免费分享阿秀个人学习计算机以来收集到的免费学习资源,点此白嫖;也记录一下自己以前买过的不错的计算机书籍、网络专栏和垃圾付费专栏;也记录一下自己以前买过的不错的计算机书籍、网络专栏和垃圾付费专栏

5、🚀如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人踩过的坑留下的经验,事实上你现在遇到的大多数问题你的学长学姐师兄师姐基本都已经遇到过了。

6、🔥 欢迎准备计算机校招的小伙伴加入我的学习圈子,一个人踽踽独行不如一群人报团取暖,圈子里沉淀了很多过去21/22/23届学长学姐的经验和总结,好好跟着走下去的,最后基本都可以拿到不错的offer!此外,每周都会进行精华总结和分享!如果你需要《阿秀的学习笔记》网站中📚︎校招八股文相关知识点的PDF版本的话,可以点此下载

# 989. 数组形式的整数加法

经典,很经典的题目,一步步渐进,直到最优解法

力扣原题链接(点我直达) (opens new window)

对于非负整数 X 而言,X数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]

给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。

示例 1:

输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
1
2
3

解释 2:

输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
1
2
3

示例 3:

输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
1
2
3

示例 4:

输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000
1
2
3

提示:

  1. 1 <= A.length <= 10000
  2. 0 <= A[i] <= 9
  3. 0 <= K <= 10000
  4. 如果 A.length > 1,那么 A[0] != 0

# 第一版,自己写的,时间和空间都一般

执行用时 :180 ms, 在所有 cpp 提交中击败了54.11%的用户

内存消耗 :13.7 MB, 在所有 cpp 提交中击败了39.51%的用户

vector<int> addToArrayForm(vector<int>& A, int K) { //52134
	
	vector<int> temp,res;
	
	while (K != 0) {

		temp.push_back(K % 10);
		K = K / 10;
	}

	int i = A.size() - 1,j=0;
	for (; i>=0 && j<temp.size(); --i,++j) {
		res.push_back(temp[j] + A[i]);	
	}
	if (j == temp.size() && i>=0) {
		for (   ; i >= 0;--i) {		 
			res.push_back(A[i]);
		}
	}
	else if (i == -1 && j<temp.size())
	{
		for ( ; j<temp.size(); ++j) {
			res.push_back(temp[j]);
		}
	}

	for (i = 0; i < res.size(); ++i) {
		if (res[i] > 9) {
			res[i] = res[i] - 10;
			if (i != res.size() - 1) res[i + 1] = res[i + 1] + 1;
			else
				res.push_back(1);

		}

	}

	reverse(res.begin(), res.end());

	return res;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 第二版,反而越改越差

执行用时 :204 ms, 在所有 cpp 提交中击败了47.70%的用户

内存消耗 :13.8 MB, 在所有 cpp 提交中击败了39.51%的用户

  vector<int> addToArrayForm(vector<int>& A, int K) {
   vector<int> temp;	
	while (K != 0) {

		temp.push_back(K % 10);
		K = K / 10;
	}

	int i = A.size() - 1,j=0;
	for (; i>=0 && j<temp.size(); --i,++j) {
		temp[j]=temp[j] + A[i];	
	}



	if (j == temp.size() && i>=0) {
		for (   ; i >= 0;--i) {		 
			temp.push_back(A[i]);
		}
	}

	for (i = 0; i < temp.size(); ++i) {
		if (temp[i] > 9) {
			temp[i] = temp[i] - 10;
			if (i != temp.size() - 1) temp[i + 1] = temp[i + 1] + 1;
			else
				temp.push_back(1);

		}

	}
	reverse(temp.begin(), temp.end());

	return temp;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 第三版,又改进了一下,快多了

执行用时 :136 ms, 在所有 cpp 提交中击败了95.79%的用户

内存消耗 :12.3 MB, 在所有 cpp 提交中击败了92.20%的用户

    vector<int> addToArrayForm(vector<int>& A, int K) {
	vector<int> temp;	
	while (K != 0) {

		temp.push_back(K % 10);
		K = K / 10;
	}

	reverse(A.begin(), A.end());
	size_t i=0;
	for ( ; i<A.size() && i<temp.size();++i) {
		A[i]=temp[i] + A[i];
		if (A[i] > 9 && i != A.size() - 1) {
			A[i] = A[i] - 10;
			A[i+ 1] = A[i + 1] + 1;
		} 
		else if (A[i] > 9 && i == A.size() - 1) {
			A[i] = A[i] - 10;
			A.push_back(1);
		}
	}


	if (i == temp.size()) {
	for (   ; i <A.size();++i) {		 
		if (A[i] > 9 && i != A.size() - 1) {
			A[i] = A[i] - 10;
			A[i + 1] = A[i + 1] + 1;
		}
		if ( A[i] > 9 && i== A.size() - 1) {
			A[i] = A[i] - 10;
			A.push_back(1);
		}
		}
	}
	else if (i == A.size())
	{
		for (; i < temp.size(); ++i) {
			A.push_back(temp[i]);
		}
	}
	reverse(A.begin(), A.end());
	return A;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44