30/09/2018, 17:51
LeetCode - Reverse Integer
Mọi người giải rồi thảo luận cho vui nhé, Đạt chọn random.
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Cài đặt theo mẫu dưới
class Solution {
public:
int reverse(int x) {
}
};
Link: https://leetcode.com/problems/reverse-integer/
Bài liên quan
Trên C, làm nhanh nên thuật toán có vẻ chưa tối ưu lắm, mà lười nghĩ nên thôi :3
Code của @iamz up lên sẽ bị overflow đấy.
Solution C++
Kết quả: https://leetcode.com/submissions/detail/36314800/
Có điều chạy chậm quá. Để coi lại
Ra là cần sử dụng thêm lib limit.h để check overflow nữa, em làm vội chả nghĩ gì
Anh cũng đâu biết đâu, chạy thử nó báo lỗi mới biết. Viết lại bằng C thì nó chạy nhanh hơn C++ tí
Account Login - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
Cái submission detail hình như của ai thì chỉ người nấy xem được thôi anh, em click vào nó not found
Thời gian chạy trên C thì nó chỉ ra là 4ms
Code Java cũng giống vậy mà chạy chậm quá
Phải coi lại mới được. Cái trò này vui, vọc nhiều ngôn ngữ thử xem thử nó thế nào
Xem qua solution runtime thì Java là chạy chậm nhất, trung bình mất khoảng 3s, gấp C khoảng 70-80 lần
Ừm, Java chạy hơi chậm. Hôm trước anh có comment trên FB bảo là Java chậm thì bị chửi dữ quá nên bỏ chạy luôn
Nhưng mà Java cũng có cái hay và mạnh của riêng nó.
Anh đang là: Runtime: 252 ms, mà sao mỗi lần submit lại có tốc độ khác nhau ta? Cùng một code mà lại trả ra tốc độ khác nhau sau mỗi lần submit
Em không làm Java nên em cũng không rõ khoản Java lắm, còn runtime thì nó lệch khoảng bao nhiêu anh? Thường thì em thấy nỗi lần chạy runtime nó thường khác một chút (dùng python em thấy thế) còn C có lẽ do runtime nhỏ quá nên mình không thấy sự khác biệt.
Up luôn Python lên chơi
C#
Javascript (runtime nó ảo quá anh ạ ):
cái này dễ nhất là chuyển thành xâu rồi reverse xâu đó rồi trả về atoi của xâu đã reverse. Nếu xâu có 10 ký tự thì phải ktra ký tự đầu 3 trường hợp: lớn hơn ‘2’, nhỏ hơn ‘2’, bằng ‘2’. Trước đó phải check âm dương, nếu là số âm thì đơn giản trả về -reverse(-x), nhưng bị dính 1 con bug là x == -2147483648 thì -x cũng chính là -2147483648 nên phải tách thành trường hợp riêng nữa
ban đầu ta thử cứ tưởng nó chậm lắm ai dè quá nhanh 12ms, submit cái nữa còn 8ms.
Python , chuyển thành str rồi reverse, runtime mất 60ms
Sao em submit lại vẫn 60ms mà, đâu có thay đổi
Cái này vọc xem code kiểu nào cho tối ưu (cùng 1 ngôn ngữ) cũng vui đây
Anh cho em hỏi hai cái này là sao anh ?
Rồi tại sao lại overflow anh ?
if (!x)
tương đương vớiif (x == 0)
, trong C/C++ thì số0
làfalse
và các số còn lại làtrue
. Phủ định của0
là true.Cái này là kiểm tra tràn số em. Tràn số là khi kết quả của result nhận được lớn hơn
INT_MAX
INT_MAX
là giá trị lớn nhất của kiểuint
. Chi tiết em xem ở đâyhttp://www.cplusplus.com/reference/climits/
Mọi người xem hộ em cái này được không
Em đang làm một bài khác về chuyển đổi cơ số, nhưng kiểu em làm thì có vẻ hơi liên quan tới vấn đề này.
Chuyện là em cho dãy hết từng chữ số (digit) vào vector _baseNum, bây giờ em muốn chuyển nó thành số nguyên với thứ tự ngược lại.
VD: 1 3 2 5 3 là vector _baseNum, em cần đưa nó về số nguyên _num thành 35231
Đây là code của em
Em thử số xâu nhị phân, nhưng tại sao chữ số cuối đúng là số 1 mà nó cứ thành số 0.
VD: 1101111 nó đổi thành 1111010
Đây là giá trị khi debug
do hàm pow khi convert thành int sẽ không chính xác.
Em có thể fix bằng cách viết một hàm pow riêng cho kiểu int hoặc dùng floor().