reverse 를 사용하여 배열의 요소를 반대로 돌리고 올림이 생기면 계속 추가 해주는 식으로 풀이
vector<int> plusOne(vector<int>& digits) {
// 리버스를 사용하여 배열을 뒤집는다.
reverse(digits.begin(), digits.end());
bool first = true; // 처음 1회 마지막 요소에 덧셈을 하기 위한 flag
bool up = false;
for (int i = 0; i < digits.size(); i++) {
int cand = digits[i];
if (first) {
// 마지막 요소에 +1 해주고 first flag 를 false 를 한다.
cand = cand + 1;
first = false;
}
if (up) {
cand++;
up = false;
}
if (cand == 10) {
// cand 의 값이 10 라면 현재 요소를 0 으로 초기화 한다.
digits[i] = 0;
up = true; // 올림이 생겼음으로 up 변수를 true 로 설정하고 다음 element 요소에 +1 할 수 있도록 준비
}
else {
digits[i] = cand;
}
}
// 배열의 요소를 모두 순회 하고나서도 up true 인 경우 마지막 요소를 추가 해준다.
if (up) {
digits.push_back(1);
}
reverse(digits.begin(), digits.end());
return digits;
}