1、String to int
模仿atoi函数,找出一个字符串第一个int型的数字。
测试用例1:
输入:2016
输出:2016
测试用例2:
输入:000687CS01
输出:687
import java.util.*;
import java.io.*;
import java.text.* ;
import java.math.*;
public class Main
{
static HashMap<String, Integer> map;
static boolean[] visited;
static int len;
static int k;
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
char[] ch = str.toCharArray();
StringBuilder sb = new StringBuilder();
int n = ch.length;
int i = 0;
for(; i < n; i++) {
if(ch[i] > '0' && ch[i] <= '9') {
sb.append(ch[i]);
break;
}
}
if(i == n) System.out.println("NULL");
else {
for(int j = i+1; j < n; j++) {
if(ch[j] >= '0' && ch[j] <= '9') {
sb.append(ch[j]);
}
else break;
}
System.out.println(sb);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、ZIG-ZAG
寻找一个序列的最长之字形的长度。如1 5 3 6 1的长度为5,1 3 5的长度为2.
序列长度不超过50,数字不超过1000
第一行输入n,表示序列长度
第二行出入序列
测试用例1:
输入:
1
44
输出:
1
测试用例2:
输入:
5
1 5 3 6 1
输出:
5
import java.util.*;
import java.io.*;
import java.text.* ;
import java.math.*;
public class Main
{
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] parts = br.readLine().split(" ");
System.out.println(getRes(n, parts));
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getRes(int n, String[] parts) {
if(n == 1) return 1;
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = Integer.parseInt(parts[i]);
}
boolean mark;
if(nums[1] > nums[0]) mark = true;
else mark = false;
int[] len = new int[n];
len[1] = 2;
for(int i = 2; i < n; i++) {
if((mark&&(nums[i]>=nums[i-1]))||(!mark&&(nums[i]<=nums[i-1]))) {
len[i] = 2;
continue;
}
len[i] = len[i-1]+1;
if(mark&&(nums[i]<nums[i-1])) mark = false;
else mark = true;
}
int max = 0;
for(int i = 0; i < n; i++) {
if(len[i] > max) max = len[i];
}
return max;
}
}
3、Sum of Fibonacci
求一个数字用斐波那契数列的数字表示的方法的数量。
规定F(1)=1,F(2)=2;
如13可以表示为
13=13
13=5+8
13=2+3+8
但不可以是13=2+3+3+5 因为有了重复的
有三种
测试用例1:
输入:6
输出:2
测试用例2:
输入:8
输出:3
import java.util.*;
import java.io.*;
import java.text.* ;
import java.math.*;
public class Main
{
static boolean[] visited;
static int res = 0;
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int sum = Integer.parseInt(br.readLine());
ArrayList<Integer> fib = new ArrayList<>();
fib.add(1);
int fib1 = 1;
int fib2 = 2;
int num = 2;
while(num <= sum) {
fib.add(num);
num = fib1+fib2;
fib1 = fib2;
fib2 = num;
}
visited = new boolean[fib.size()];
backtrack(sum, fib, 0);
System.out.println(res);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void backtrack(int sum, ArrayList<Integer> fib, int begin) {
if(sum == 0) {
res++;
return;
}
if(sum < 0) return;
for(int i = begin; i < fib.size(); i++) {
if(visited[i]) continue;
visited[i] = true;
backtrack(sum-fib.get(i), fib, i+1);
visited[i] = false;
}
}
}