Arrays 数字放置和计数

Arrays 数字放置和计数,arrays,algorithm,sorting,counting,brute-force,Arrays,Algorithm,Sorting,Counting,Brute Force,我发现了一个微软的面试问题 我为你删去了一个问题: “这是一个包含 _ 0 _ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _9位数字“使其在逻辑上正确。所以重点是,在有下划线的地方,你需要放一个数字,这样整个 这句话变为真。即,字符串中有10个、51个等 我在网上找不到答案。我们使用我的室友=)手动强制执行,并找到一个解决方案: 10,71,32,23,14,15,16,27,18,19 您将如何将此问题作为编程问题来处理?您将如何执行蛮力实现?有没有聪明的办法解决这个问题?有

我发现了一个微软的面试问题

我为你删去了一个问题:

“这是一个包含 _ 0 _ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _9位数字“使其在逻辑上正确。所以重点是,在有下划线的地方,你需要放一个数字,这样整个 这句话变为真。即,字符串中有10个、51个等

我在网上找不到答案。我们使用我的室友=)手动强制执行,并找到一个解决方案:

10,71,32,23,14,15,16,27,18,19


您将如何将此问题作为编程问题来处理?您将如何执行蛮力实现?有没有聪明的办法解决这个问题?有不同的解决方案吗?

暴力解决方案相当简单

尝试每个字符可能出现的次数。将目标出现次数与实际出现次数分开,并将两者进行比较

initialize a 'target' array to the target number of occurrences of each character
  (initial values don't matter - they are assigned before being checked)

initialize an 'occurrences' array to the actual number of occurrences
  (initial values are all 1's in this case)

call bruteForce(0)

bruteForce(value)
  if value > greatest value
    check data and exit is successful
  for i = 1:9
    target[value] = i
    // fail early - not strictly necessary, but should help running time
    if value >= i && occurrences[i] + 1 > target[i]
      continue
    occurrences[i]++
    // recurse
    bruteForce(value + 1)
    occurrences[i]--