Tricky Google interview question

前端 未结 21 1746
花落未央
花落未央 2020-12-22 15:39

A friend of mine is interviewing for a job. One of the interview questions got me thinking, just wanted some feedback.

There are 2 non-negative integers: i and j. Gi

21条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-22 16:00

    Here is my attempt with Scala:

    case class IndexValue(twosIndex: Int, fivesIndex: Int)
    case class OutputValues(twos: Int, fives: Int, value: Int) {
      def test(): Boolean = {
        Math.pow(2,  twos) * Math.pow(5, fives) == value
      }
    }
    
    def run(last: IndexValue = IndexValue(0, 0), list: List[OutputValues] = List(OutputValues(0, 0, 1))): List[OutputValues] = {
      if (list.size > 20) {
        return list
      }
    
      val twosValue = list(last.twosIndex).value * 2
      val fivesValue = list(last.fivesIndex).value * 5
    
      if (twosValue == fivesValue) {
        val lastIndex = IndexValue(last.twosIndex + 1, last.fivesIndex + 1)
        val outputValues = OutputValues(value = twosValue, twos = list(last.twosIndex).twos + 1, fives = list(last.fivesIndex).fives + 1)
        run(lastIndex, list :+ outputValues)
      } else if (twosValue < fivesValue) {
        val lastIndex = IndexValue(last.twosIndex + 1, last.fivesIndex)
        val outputValues = OutputValues(value = twosValue, twos = list(last.twosIndex).twos + 1, fives = list(last.twosIndex).fives)
        run(lastIndex, list :+ outputValues)
      } else {
        val lastIndex = IndexValue(last.twosIndex, last.fivesIndex + 1)
        val outputValues = OutputValues(value = fivesValue, twos = list(last.fivesIndex).twos, fives = list(last.fivesIndex).fives + 1)
        run(lastIndex, list :+ outputValues)
      }
    }
    
    val initialIndex = IndexValue(0, 0)
    run(initialIndex, List(OutputValues(0, 0, 1))) foreach println
    

    Output:

    OutputValues(0,0,1)
    OutputValues(1,0,2)
    OutputValues(2,0,4)
    OutputValues(0,1,5)
    OutputValues(3,0,8)
    OutputValues(1,1,10)
    OutputValues(4,0,16)
    OutputValues(2,1,20)
    OutputValues(0,2,25)
    OutputValues(5,0,32)
    OutputValues(3,1,40)
    OutputValues(1,2,50)
    OutputValues(6,0,64)
    OutputValues(4,1,80)
    OutputValues(2,2,100)
    OutputValues(0,3,125)
    OutputValues(7,0,128)
    OutputValues(5,1,160)
    OutputValues(3,2,200)
    OutputValues(1,3,250)
    OutputValues(8,0,256)
    

提交回复
热议问题