Leetcode: Plus One

You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0‘s.

Increment the large integer by one and return the resulting array of digits.

Example 1:

Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].

Example 2:

Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.
Incrementing by one gives 4321 + 1 = 4322.
Thus, the result should be [4,3,2,2].

Example 3:

Input: digits = [9]
Output: [1,0]
Explanation: The array represents the integer 9.
Incrementing by one gives 9 + 1 = 10.
Thus, the result should be [1,0].

Constraints:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits does not contain any leading 0‘s.

My Solution

public class Solution {
    public int[] PlusOne(int[] digits) {
        for(int i = digits.Length-1; i>=0; i--)
        {
            if(digits[i] == 9)
            {
                digits[i] = 0;
            }
            else {
                digits[i]++;
                return digits;
            }
        }
        int[] dummyArray = new int[digits.Length+1];
        dummyArray[0] = 1;
        return dummyArray;
    }
}

Reference: https://leetcode.com/problems/plus-one/?envType=study-plan-v2&envId=top-interview-150

When and Why You Should Refactor a Customer-Facing Application

Refactoring is the process of improving the internal structure of your code without changing its external behavior. It’s essential for maintaining a healthy codebase, especially for customer-facing applications. Here’s when you should consider refactoring:


1. Performance Issues Impacting User Experience

  • If the app is slow, timing out, or consuming excessive resources, refactor to optimize the code.
  • Focus on improving database queries, algorithms, and caching techniques to boost speed.

2. Frequent Bugs or Crashes

  • Constant bug fixes indicate poor code quality.
  • Refactor to stabilize the application, making it less error-prone and easier to maintain.

3. Difficulty Adding New Features

  • When new features become hard to implement due to complex code, refactoring is necessary.
  • Simplify and decouple the code to make future development faster and smoother.

4. Code Duplication

  • Duplicate code makes maintenance a nightmare.
  • Apply the DRY principle (Don’t Repeat Yourself) during refactoring to remove redundancy and improve efficiency.

5. Outdated Libraries or Legacy Code

  • Relying on old libraries can result in security risks and compatibility issues.
  • Refactor to modernize the application with up-to-date tools and technologies.

6. Poor Code Readability

  • If the code is hard to understand, especially for new developers, refactoring can help.
  • Clean up the structure, improve naming conventions, and simplify logic to enhance collaboration.

7. Security Vulnerabilities

  • Outdated code can lead to serious security risks, especially in customer-facing apps.
  • Refactor vulnerable areas to ensure data protection and compliance with security standards.

8. Low Testability

  • Highly coupled components can make writing tests difficult.
  • Refactor the code to improve modularity, enabling better test coverage and a more reliable app.

9. Evolved Business Logic

  • When business requirements change, your code may no longer align.
  • Refactor to reflect updated business logic and support new workflows or customer needs.

10. Accumulated Technical Debt

  • Technical debt makes future updates more complex and risky.
  • Refactor regularly to “pay off” this debt, improving long-term maintainability and performance.

Conclusion: Refactor Proactively

Refactoring prevents performance issues, improves stability, and reduces technical debt. By addressing these common problems early, you’ll create a more maintainable and scalable product that continues to provide value to your customers.