連結:https://leetcode.com/problems/3sum/description/
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
int target = 0;
Arrays.sort(nums);
List<List<Integer>> result = new ArrayList<>();
for (int i = 0;i < nums.length;i++)
{
int j = i + 1;
int k = nums.length - 1;
if(i!=0 && nums[i]==nums[i-1]) continue;
while (j < k)
{
int sum = nums[i] + nums[j] + nums[k];
if (sum == target)
{
List<Integer> temp=Arrays.asList(nums[i],nums[j],nums[k]);
result.add(temp);
j++;
k--;
while(j<k && nums[j]==nums[j-1]) j++;
while(j<k && nums[k]==nums[k+1]) k--;
}
else if (sum < target)
{
j++;
}
else
{
k--;
}
}
}
return result;
}
}
連結:https://leetcode.com/problems/3sum/description/
等級:Medium
等級:Medium
可以使用兩個巢狀循環,一個用於計算行,一個用於計算每行中的字元。我們也可以使用一個變數來追蹤每個迴圈的長度,在本例中為 2 * numRows - 2。在每次回圈計算中,我們可以將字元新增到模式中對應的行中,如果存在的話,也可以在下一個循環中加入對應的字元。
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1)
return s;
StringBuilder result = new StringBuilder();
int len = s.length();
int cycle = 2 * numRows - 2;
for (int i = 0;i < numRows; i++) {
for (int j = 0; j+i < len; j += cycle) {
result.append(s.charAt(j + i));
//第一個最後一個只出現一次
//中間每個循環會出現兩次
//第二次由循環尾加到前面
if (i != 0 && i != numRows - 1 && j + cycle - i < len) {
result.append(s.charAt(j + cycle - i));
}
}
}
return result.toString();
}
}