问题陈述是基本的-如果输入是32位有符号整数,则输出反向整数,否则输出0。
这是我想出的代码
public class Solution {
public int reverse(int A) {
if(A>=2143483647 || A<-2143483647)
return 0;
if(A>=0)
return Integer.parseInt((new StringBuilder(String.valueOf(A))).reverse().toString());
else
return -1*Integer.parseInt((new StringBuilder(String.valueOf(-1*A))).reverse().toString());
}
}
不接受该解决方案。问题出在我的代码还是测试用例中?
答案 0 :(得分:2)
假设输入为int32,这是一种可能的方法,包括检查溢出。
public class Solution {
public int reverse(int A) {
//if(A < Integer.MIN_VALUE || A > Integer.MAX_VALUE) return 0;
boolean neg = A < 0;
A = Math.abs(A);
long ret = 0;
while(A != 0){
ret = ret*10 + A%10;
A = A/10;
}
if(ret > Integer.MAX_VALUE) return 0;
return neg ? -(int)ret : (int)ret;
}
}
如果输入较大,请注意将int更改为long。
答案 1 :(得分:2)
accepted answer很近,但是缺少一些边缘情况。这是一个基于已接受答案的答案,但希望可以正确处理所有情况。
OverlayEntry _createOverlayEntry() {
RenderBox renderBox = context.findRenderObject();
var size = renderBox.size;
var offset = renderBox.localToGlobal(Offset.zero);
return OverlayEntry(
builder: (context) => Positioned(
left: offset.dx,
top: offset.dy + 38.0,
width: size.width,
child: Material(
elevation: 6.0,
child: Padding(
padding: EdgeInsets.all(8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(right: 8.0),
child: Icon(Icons.check_box_outline_blank),
),
Column(
children: <Widget>[
Container(
height: 30.0,
width: 100.0,
color: Colors.green,
child: TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: "New To-Do"
),
),
),
Container(
height: 30.0,
width: 100.0,
color: Colors.blue,
child: TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: "Notes"
),
),
)
],
)
],
),
)
),
)
);
}
答案 2 :(得分:1)
您可以先尝试转换为长参数(这样可以确保它不会溢出),然后再进行检查。
public int reverse(int A) {
long reversed;
if(A>=0)
reversed= reverseString(A);
else
reversed -1* reverseString(-A) ;
//we do the checking only after we have done the reverse.
if(reversed > Integer.Max_VALUE || reversed < Integer.MIN_VALUE)
return 0;
else
return (int) reversed; //we do a down cast here.
}
public long reverseString(int A){
StringBuilder sb = new StringBuilder(""+A).reverse();
String s = sb.reverse().toString();
return Long.parseLong(s);
}
答案 3 :(得分:0)
此代码将同时处理正负两个数字,如果结果大于Integer.MAX_VALUE,则反转后将返回零。
public static int reverse(int x) {
boolean positive = true;
if(x < 0) {
positive = false;
x = x * -1;
}
long result = 0;
while(x > 0) {
result = (result * 10) + (x % 10);
x = x / 10;
}
if(result > Integer.MAX_VALUE) {
return 0;
}
return positive ? (int)result : (int)(result * -1);
}