Giả sử bạn đang đứng tại vị trí 0 trên một đường số vô hạn. Mục tiêu nằm tại vị trí target. Ở mỗi bước di chuyển, bạn có thể đi sang trái hoặc sang phải. Tại bước thứ n (bắt đầu từ 1), bạn đi đúng n bước. Bài toán yêu cầu tìm số bước tối thiểu để đến đích.
Ví dụ: target = 3 cần 2 bước. Từ 0 đến 1 (bước 1), từ 1 đến 3 (bước 2).
Thuật toán
- Lấy giá trị tuyệt đối:
target = |target|, khởi tạocnt = 0. - Khi
target > 0:- Tăng
cntlên 1. - Trừ
cntkhỏitarget.
- Tăng
- Nếu
targetchẵn, trả vềcnt; ngược lại trả vềcnt + 1 + cnt % 2.
Mã nguồn C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int reachNumber(int target) {
target = abs(target);
int cnt = 0;
while (target > 0) {
target -= ++cnt;
}
return (target % 2 == 0) ? cnt : cnt + 1 + cnt % 2;
}
};
int main() {
Solution ob;
cout << ob.reachNumber(3);
return 0;
}
Đầu vào / Đầu ra
Input: 3
Output: 2