문제 출처 :
https://leetcode.com/problems/plus-one/
문제를 간단히 해석하자면 다음과 같습니다 ;
음수가 아닌 정수를 나타내는 10진수 배열이 비어 있지 않으면 1을 정수로 증가시킵니다.
자릿수는 가장 중요한 자릿수가 목록의 맨 앞에 오도록 저장되며, Array의 각 요소에는 한 자릿수가 포함됩니다.
정수에는 숫자 0을 제외하고 먼저온 0이 포함되어 있지 않다고 가정할 수 있습니다.
Example 1:
Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: 배열은 정수 123을 나타냅니다.
Example 2:
Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: 배열은 정수 4321을 나타냅니다.
Example 3:
Input: digits = [0]
Output: [1]
해당 문제를 해결하기 위해 조금 시간이 걸렸습니다.
처음에는 따로 분리된 숫자들을 하나로 합친 후에 1을 더해서 다시 분리하고자 하였지만 너무 불필요한 과정들이 많아보여서 현재의 코드가 되었습니다.
간략히 설명하자면 우선 제일 마지막자리에 1을 더해주고 그 상태에서 뒤에서부터 값을 비교해줍니다. 만약 10보다 크다면 현재 자리값을 10으로 나눈 나머지로 변경해주고 그 앞자리 값에는 1을 더해줍니다. 만약 앞자리에 1을 추가해야하지만 넣을 수가 없다면 answer이라는 vector <int>에 값을 추가하여 제일 앞자리 값을 생성해줍니다. vector가 아니가 linked list였다면 first 자리에 넣어줄 수 있었겠지만 vector 타입이므로 다음과 같이 구현하였습니다.
class Solution {
private:
vector <int> answer ;
public:
vector<int> plusOne(vector<int>& digits) {
digits[digits.size()-1] += 1 ;
for(int i = digits.size()-1 ; i >= 0 ; i--){
if(digits[i] >= 10){
if(i-1 >= 0)
digits[i-1] += 1 ;
else
answer.push_back(1) ;
digits[i] %= 10 ;
}
}
for(int i = 0 ; i < digits.size() ; i++)
answer.push_back(digits[i]) ;
return answer ;
}
};
https://github.com/gurcks8989/CodingTest/blob/master/LeetCode/P66_PlusOne.cpp
훈수, 조언 언제나 환영입니다.