Leetcode 171. Excel Sheet Column Number

Problem Explanation

In this problem, we are given a string representing a column title from an Excel spreadsheet. In Excel, the columns are labeled letters A to Z. After Z, the labels continue with AA, AB, AC and so on. Our goal is to convert this column label into the corresponding column number. For example, the label "A" corresponds to column number 1, "B" is 2, "Z" is 26, "AA" is 27, "AB" is 28, and so on.

This is similar to converting a number from base 26 to a base 10 number system. We loop through the letters of the string from left to right. For each letter, we multiply the current number by 26 (analogous to "shifting" in decimal numbers where you multiply by 10) and add the value of the current letter (1 for 'A', 2 for 'B', and so on up to 26 for 'Z'). This gives us the final column number.

Let's walk through an example:

Suppose the input string is "AB".

  • For the first letter 'A', the corresponding number is 1.
  • The next letter is 'B'. To incorporate this, we multiply the current number (1) by 26 and add the value of 'B', which is 2. Now our number is 1*26 + 2 = 28.
  • Therefore, the column label "AB" corresponds to the column number 28.

Approaches

The approach consists of the following steps:

  • Initialize a result variable as 0.
  • Loop through the string from left to right.
  • For each character, multiply the result by 26 and add the numerical value of the character which is given by the ASCII value of the letter minus the ASCII value of 'A' plus 1.
  • In the end, the result has the final column number.

The time complexity of this approach is O(n), where n is the length of the input string. We are simply iterating through the string once.

Python Solution

1
2python
3class Solution:
4    def titleToNumber(self, s: str) -> int:
5        # Initialize result as 0
6        result = 0
7        # Loop through the string
8        for char in s:
9            # Get the numerical value of the character
10            numVal = ord(char) - ord('A') + 1
11            # Multiply the result by 26 and add the numerical value
12            result = result * 26 + numVal
13        # Return the result
14        return result

Java Solution

1
2java
3class Solution {
4    public int titleToNumber(String s) {
5        // Initialize result as 0
6        int result = 0;
7        // Loop through the string
8        for (char c : s.toCharArray()) {
9            // Get the numerical value of the character
10            int numVal = c - 'A' + 1;
11            // Multiply the result by 26 and add the numerical value
12            result = result * 26 + numVal;
13        }
14        // Return the result
15        return result;
16    }
17}

JavaScript Solution

1
2javascript
3var titleToNumber = function(s) {
4    // Initialize result as 0
5    var result = 0;
6    // Loop through the string
7    for (var i = 0; i < s.length; i++) {
8        // Get the numerical value of the character
9        var numVal = s.charCodeAt(i) - 'A'.charCodeAt(0) + 1;
10        // Multiply the result by 26 and add the numerical value
11        result = result * 26 + numVal;
12    }
13    // Return the result
14    return result;
15};

C++ Solution

1
2c++
3class Solution {
4public:
5    int titleToNumber(string s) {
6        // Initialize result as 0
7        int result = 0;
8        // Loop through the string
9        for (char c : s) {
10            // Get the numerical value of the character
11            int numVal = c - 'A' + 1;
12            // Multiply the result by 26 and add the numerical value
13            result = result * 26 + numVal;
14        }
15        // Return the result
16        return result;
17    }
18};

C# Solution

1
2csharp
3public class Solution {
4    public int TitleToNumber(string s) {
5        // Initialize result as 0
6        int result = 0;
7        // Loop through the string
8        foreach (char c in s) {
9            // Get the numerical value of the character
10            int numVal = c - 'A' + 1;
11            // Multiply the result by 26 and add the numerical value
12            result = result * 26 + numVal;
13        }
14        // Return the result
15        return result;
16    }
17}

Go Solution

1
2go
3func titleToNumber(s string) int {
4    // Initialize result as 0
5    var result int
6    // Loop through the string
7    for _, c := range s {
8        numVal := int(c - 'A' + 1)
9        result = result*26 + numVal
10    }
11    // Return the result
12    return result
13}

R Solution

1
2R
3titleToNumber <- function(s) {
4  # Initialize result as 0
5  result <- 0
6  # Loop through the string
7  for(i in 1:nchar(s)){
8    numVal <- as.integer(charToRaw(substr(s, i, i))) - as.integer(charToRaw("A")) + 1
9    result <- result * 26 + numVal
10  }
11  # Return the result
12  return(result)
13}

Clojure Solution

1
2clojure
3(defn titleToNumber [s]
4  (let [conv (fn [char] (- (int char) 64))]
5    (reduce #(+ (* %1 26) (conv %2)) 0 s)))

Ruby Solution

1
2ruby
3def title_to_number(s)
4    # Initialize result as 0
5    result = 0
6    # Loop through the string
7    s.each_byte do |c|
8        # Get the numerical value of the character
9        num_val = c - 64
10        # Multiply the result by 26 and add the numerical value
11        result = result * 26 + num_val
12    end
13    # Return the result
14    return result
15end

In conclusion, converting an Excel column title into its corresponding number can be solved using a simple algorithm along with the ASCII values of the English alphabet. This problem can be solved in various programming languages including Python, Java, and JavaScript with a time complexity of O(n), where n is the length of the input string. The provided solutions in different programming languages utilize a similar approach, emphasizing the algorithmic aspect of the problem rather than focusing on a particular language syntax.


Got a question? Ask the Teaching Assistant anything you don't understand.

Still not clear? Ask in the Forum,  Discord or Submit the part you don't understand to our editors.


TA 👨‍🏫