在Scala编程中,两个非负整数A和B的十进制zip是整数C

时间:2018-08-16 10:44:00

标签: algorithm scala

两个非负整数A和B的十进制zip是整数C  从十进制表示创建十进制表示  A和B的值如下:

• the first (i.e. the most significant) digit of C is the first digit of A;
• the second digit of C is the first digit of B;
• the third digit of C is the second digit of A;
• the fourth digit of C is the second digit of B;
• etc.

如果整数A和B之一用完数字,则剩余的数字  另一个整数将附加到结果中。

小数表示为0的假设为“ 0”。

例如,十进制的12和56是1526。  56和12的十进制邮政编码为5162。  12345和678的十进制邮政编码为16273845。  123和67890的十进制邮政编码为16273890。

编写函数:function solution(A,B);那,给定两个非负数  整数A和B,返回其十进制邮政编码。

如果结果超过100,000,000,则函数应返回-1。

例如,给定A = 12345和B = 678,该函数应返回  16273845,如上所述。

我已经看到许多使用java的解决方案,但是我试图使用scala为上述问题找到解决方案...

↓ Solution attempt in answer below ↓

3 个答案:

答案 0 :(得分:1)

这是一个可能更惯用的解决方案,它也采用指定的输入类型:

object Demo {

   def decimalZip(ai: Int, bi: Int): Int = {
      val a = ai.toString
      val b = bi.toString
      val m = a.size min b.size
      val resStr = (a zip b)
        .flatMap { case (x, y) => Seq(x, y) }
        .mkString + 
        a.drop(m) + 
        b.drop(m)

      Some(resStr)
        .filter(_.size <= 9)
        .map(_.toInt)
        .filter(_ <= 100000000)
        .getOrElse(-1)
   }

  def main(args: Array[String]) {
    for ((a, b, res) <- List(
      (12, 56, 1526),
      (56, 12, 5162),
      (12345, 678, 16273845),
      (123, 67890, 16273890),
      (1111, 11111, -1)
    )) {
      val actualResult = decimalZip(a, b)
      require(res == actualResult)
      println(s"$a $b -> $actualResult")
    }
  }
}

打印:

12 56 -> 1526
56 12 -> 5162
12345 678 -> 16273845
123 67890 -> 16273890
1111 11111 -> -1

或者,flatMap可以替换为

.map{ case (x, y) => new String(Array(x, y)) } 

.map { case (x, y) => s"$x$y" }

答案 1 :(得分:0)

还没有看到Python实现。

...
export class Widgets extends Component {
  ...
  constructor(props) {
    super()

    const { widgets } = props;
    this.state = {
      filteredWidgets: widgets
    };
  }

  filterWidget = e => {
    // some filtering logic
    this.setState({ filteredWidgets });
  }

  render() {
    const { filteredWidgets } = this.state;
    return (
      <div>
        <input type="text" onChange={this.filterWidgets} />
        {filteredWidgets.count}
      </div>
    )
  }
}

答案 2 :(得分:-1)

object Demo {
   def main(args: Array[String]) {
       var a = 
      println( "Decimal Zip Value : " + decimalZip(123,56789) );
   }

   def decimalZip( aa:Long, ab:Long ) : Long = {
        var a=aa.toString;
        var b=ab.toString;
        if ((a.toLong < 0 || a.toLong > 100000000) || ((b.toLong < 0 || b.toLong > 100000000))) {
            return -1;
        }
      var i = 0;
      var c = ""
      while(i < a.length() || i < b.length() ){
            if (i < a.length()) {
                c += a.charAt(i);
            }
            if (i < b.length()) {
                c += b.charAt(i);
            }
        i+=1;
      }
      var result = c.toLong
       if (result > 100000000) {
            return -1;
        }
      return result
   }
}