返回

算法实战:攻克长度倒序、二进制颠倒和序列排列

后端

  1. 最后一个单词的长度

题目

给定一个字符串,计算最后一个单词的长度。

解法

  1. 从字符串的末尾开始遍历。
  2. 跳过任何空格。
  3. 一旦遇到非空格字符,开始计数。
  4. 继续计数,直到遇到空格或字符串的开头。
  5. 返回计数的值。

代码实现

def length_of_last_word(string):
  """
  Calculates the length of the last word in a string.

  Args:
    string: The string to search.

  Returns:
    The length of the last word in the string.
  """

  # Trim any trailing whitespace.
  string = string.rstrip()

  # If the string is empty, return 0.
  if not string:
    return 0

  # Start from the end of the string and iterate backwards.
  i = len(string) - 1

  # Skip any spaces.
  while i >= 0 and string[i] == ' ':
    i -= 1

  # Start counting the length of the word.
  word_length = 0
  while i >= 0 and string[i] != ' ':
    word_length += 1
    i -= 1

  # Return the length of the word.
  return word_length

2. 颠倒二进制位

题目

颠倒给定的 32 位无符号整数的二进制位。

解法

  1. 将整数转换为二进制字符串。
  2. 将二进制字符串反转。
  3. 将反转后的二进制字符串转换为整数。

代码实现

def reverse_bits(n):
  """
  Reverses the bits of a 32-bit unsigned integer.

  Args:
    n: The integer to reverse.

  Returns:
    The reversed integer.
  """

  # Convert the integer to a binary string.
  binary_string = bin(n)[2:]

  # Reverse the binary string.
  reversed_binary_string = binary_string[::-1]

  # Pad the reversed binary string with zeros to make it 32 bits long.
  reversed_binary_string = reversed_binary_string.rjust(32, '0')

  # Convert the reversed binary string to an integer.
  reversed_integer = int(reversed_binary_string, 2)

  # Return the reversed integer.
  return reversed_integer

3. 排列序列

题目描述

给定一个整数 n 和一个整数 k,返回第 k 个排列序列。

解法

  1. 创建一个包含所有数字的列表。
  2. 初始化一个空字符串。
  3. 使用递归或迭代生成所有可能的排列。
  4. 将生成的排列添加到一个列表中。
  5. 返回列表中的第 k 个排列。

代码实现

def get_permutation(n, k):
  """
  Gets the k-th permutation of a sequence of numbers.

  Args:
    n: The number of elements in the sequence.
    k: The index of the permutation to get.

  Returns:
    The k-th permutation of the sequence.
  """

  # Create a list of all the numbers from 1 to n.
  numbers = list(range(1, n + 1))

  # Initialize an empty string.
  permutation = ""

  # Use recursion to generate all possible permutations.
  def generate_permutations(numbers, permutation):
    # If there are no more numbers, add the permutation to the list.
    if not numbers:
      permutations.append(permutation)
      return

    # For each number in the list, add it to the permutation and generate
    # all possible permutations of the remaining numbers.
    for i in range(len(numbers)):
      generate_permutations(numbers[:i] + numbers[i + 1:], permutation + str(numbers[i]))

  # Generate all possible permutations.
  permutations = []
  generate_permutations(numbers, permutation)

  # Return the k-th permutation.
  return permutations[k - 1]

结语

通过这三个算法题目的讲解,我们深入学习了算法的知识和应用。这些算法题目的解决方法各不相同,涉及到字符串操作、位操作和排列组合等多种算法技巧。掌握了这些算法技巧,我们就能在实际编程中解决更复杂的问题。