数字放置和计数

时间:2013-11-12 23:08:57

标签: arrays algorithm sorting counting brute-force

我在this blog

中找到了一个微软面试问题

我为你解决了这个问题:

  

“这是一个包含的句子   _ 0   _ 1   _ 2   _ 3   _ 4   _ 5   _ 6   _ 7   _ 8   _ 9位“使其逻辑正确。所以重点是,如果有一个下划线,你需要放一个数字以便整个数字   句子变成了现实。即,字符串中有1 0,5 1,等等。

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

  

1 0,7 1 1,3 2 2,3 3,1 5,1 1,6,7 7,1 1 9

您如何将此问题作为编程问题来解决?你会怎么做暴力实施?有一个聪明的方法来解决这个问题吗?有不同的解决方案吗?

1 个答案:

答案 0 :(得分:2)

蛮力解决方案相当容易。

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

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]--

Java live demo