两个非负整数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为上述问题找到解决方案...
答案 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
}
}