-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path66.加一.php
150 lines (130 loc) · 2.92 KB
/
66.加一.php
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?php
/*
* @lc app=leetcode.cn id=66 lang=php
*
* [66] 加一
*
* https://leetcode-cn.com/problems/plus-one/description/
*
* algorithms
* Easy (45.70%)
* Likes: 687
* Dislikes: 0
* Total Accepted: 286.4K
* Total Submissions: 626.5K
* Testcase Example: '[1,2,3]'
*
* 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
*
* 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
*
* 你可以假设除了整数 0 之外,这个整数不会以零开头。
*
*
*
* 示例 1:
*
*
* 输入:digits = [1,2,3]
* 输出:[1,2,4]
* 解释:输入数组表示数字 123。
*
*
* 示例 2:
*
*
* 输入:digits = [4,3,2,1]
* 输出:[4,3,2,2]
* 解释:输入数组表示数字 4321。
*
*
* 示例 3:
*
*
* 输入:digits = [0]
* 输出:[1]
*
*
*
*
* 提示:
*
*
* 1
* 0
*
*
*/
// @lc code=start
class Solution
{
/**
* @param int[] $digits
* @return int[]
*/
public function plusOne($digits)
{
$length = count($digits);
$result = [];
$flag = 1; // 0 不需要加一, 1 需要加一
for ($i = $length - 1; $i >= 0; $i--) {
// 不需要加一
if ($flag === 0) {
$result[] = $digits[$i];
}
// 需要加一
if ($flag === 1) {
if ($digits[$i] < 9) {
// 直接加一
$result[] = $digits[$i] + 1;
$flag = 0;
} elseif ($digits[$i] === 9) {
$result[] = 0; // 进位加一
$flag = 1;
}
}
}
// 最后标志为还是一,则说明需要进位
if ($flag === 1) {
$result[] = 1;
}
return array_reverse($result);
// $r = [];
// for ($i = count($result) - 1; $i >= 0; $i--) {
// $r[] = $result[$i];
// }
// return $r;
}
// /**
// * 大数的时候无法处理
// * @param int[] $digits
// * @return int[]
// */
// public function plusOne($digits)
// {
// $length = count($digits);
// $num = 0;
// // 转为整型
// for ($i = 0; $i < $length; $i ++) {
// if ($num === 0 && $digits[$i] === 0) {
// continue;
// }
// $num += $digits[$i] * (10 ** ($length - $i - 1));
// }
// // 加一
// $num = $num + 1;
// // 转成 数组
// $nums = [];
// while ($num !== 0) {
// $nums[] = $num % 10;
// $num = (int)($num / 10);
// }
// $result = [];
// // 逆序
// for ($i = count($nums) - 1; $i >= 0; $i --) {
// $result[] = $nums[$i];
// }
// // 输出
// return $result;
}
// @lc code=end