给定一个字符串 s
和一个整数 k
,你需要对从字符串开头算起的每隔 2k
个字符的前 k
个字符进行反转。
k
个,则将剩余字符全部反转。2k
但大于或等于 k
个,则反转前 k
个字符,其余字符保持原样。示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
class Solution {
public String reverseStr(String s, int k) {
char[] ans = s.toCharArray();
for (int i = 0; i < ans.length; i += 2 * k) {
int start = i;
int end = Math.min(i + k - 1, ans.length - 1);
while (start < end) {
char temp = s.charAt(end);
ans[end] = ans[start];
ans[start] = temp;
start++;
end--;
}
}
return new String(ans);
}
}
在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。
移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R
(右),L
(左),U
(上)和 D
(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。
**注意:**机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。
示例 1:
输入: "UD"
输出: true
解释:机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true。
class Solution {
public boolean judgeCircle(String moves) {
int x = 0;
int y = 0;
char[] move = moves.toCharArray();
for (char c : move) {
switch(c){
case 'U':
y += 1;
break;
case 'D':
y -= 1;
break;
case 'L':
x -= 1;
break;
case 'R':
x += 1;
break;
}
}
return x == 0 && y == 0;
}
}
给你一个长度为 n
的整数数组,请你判断在 最多 改变 1
个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中任意的 i
(0 <= i <= n-2)
,总满足 nums[i] <= nums[i + 1]
。
示例 1:
输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。
class Solution {
public boolean checkPossibility(int[] nums) {
int count = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[i] < nums[i - 1]) {
if (i == 1 || nums[i] >= nums[i - 2]) {
nums[i - 1] = nums[i];
}
else {
nums[i] = nums[i - 1];
}
count++;
}
}
return count <= 1;
}
}
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
class Solution {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
boolean[] used = new boolean[nums.length];
backTrack(nums, used);
return ans;
}
public void backTrack(int[] nums, boolean[] used) {
if(path.size() == nums.length){
ans.add(new ArrayList<>(path));
return;
}
for (int i = 0; i < nums.length; i++) {
if (used[i] == true) {
continue;
}
used[i] = true;
path.add(nums[i]);
backTrack(nums, used);
path.remove(path.size() - 1);
used[i] = false;
}
}
}