一、
leetcode第13题,从低位向高位进行遍历,对数字进行累加即可
import java.util.*;
public class Solution {
public int romanToInt (String s) {
if(s == null || s.length() == 0)
return 0;
HashMap<Character, Integer> map = new HashMap<>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
int res = 0;
for(int i = s.length() - 1; i >= 0; i--){
if(i >= 1 && s.charAt(i) == 'V' && s.charAt(i - 1) == 'I'){
res += 4;
i --;
}else if(i >= 1 && s.charAt(i) == 'X' && s.charAt(i - 1) == 'I'){
res += 9;
i --;
}else if(i >= 1 && s.charAt(i) == 'L' && s.charAt(i - 1) == 'X'){
res += 40;
i --;
}else if(i >= 1 && s.charAt(i) == 'C' && s.charAt(i - 1) == 'X'){
res += 90;
i --;
}else if(i >= 1 && s.charAt(i) == 'D' && s.charAt(i - 1) == 'C'){
res += 400;
i --;
}else if(i >= 1 && s.charAt(i) == 'M' && s.charAt(i - 1) == 'C'){
res += 900;
i --;
}else
res += map.get(s.charAt(i));
}
return res;
}
}
二、
//import java.io.InputStreamReader;
//import java.io.BufferedReader;
//import java.io.EOFException;
import java.util.Scanner;
/*
- 全部首字母大写
- 第一个单词首字母小写,其余单词首字母大写
- 单词全部小写,由下划线连接
- 单词全部小写,由减号连接
*/
public class Main{
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//String s = br.readLine();
//解析输入用空格将每个单词隔开
StringBuilder ans = new StringBuilder();
ans.append(s.charAt(0));
for(int i = 1;i < s.length();i++){
if(Character.isUpperCase(s.charAt(i))){
ans.append(' ').append(s.charAt(i));
}else if(s.charAt(i) == '_' || s.charAt(i) == '-'){
ans.append(' ').append(Character.toUpperCase(s.charAt(i+1)));
i++;
}else{
ans.append(s.charAt(i));
}
}
String str1 = ans.toString().replaceAll(" ","");
String str2 = ans.toString();
String s1 = str1.substring(0,1).toUpperCase() + str1.substring(1);
String s2 = str1.substring(0,1).toLowerCase() + str1.substring(1);
String s3 = str2.toLowerCase().replaceAll(" ","_");
String s4 = str2.toLowerCase().replaceAll(" ","-");
System.out.print(s1 + " " + s2 + " " + s3 + " " + s4);
}
}
/*
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int start = 0;
StringBuilder ans0 = new StringBuilder();
StringBuilder ans1 = new StringBuilder();
for (int i = 1; i < s.length(); i++) {
char c = s.charAt(i);
if ((c >= 'A' && c <= 'Z') || c == '-' || c == '_') {
ans0.append(Character.toUpperCase(s.charAt(start))).append(s, start + 1, i);
ans1.append(Character.toLowerCase(s.charAt(start))).append(s, start + 1, i).append('_');
start = i;
if (c == '-' || c == '_')
start++;
}
}
String s1 = ans0.append(Character.toUpperCase(s.charAt(start))).append(s, start + 1, s.length()).toString();
String s2 = ans1.append(Character.toLowerCase(s.charAt(start))).append(s, start + 1, s.length()).toString();
System.out.print(s1 + " ");
System.out.print(s1.substring(0, 1).toLowerCase() + s1.substring(1) + " ");
System.out.print(s2+" ");
System.out.println(s2.replaceAll("_", "-"));
}
*/
三、
import java.util.*;
public class Solution {
StringBuilder res=new StringBuilder();
LinkedList<Integer> stack_multi=new LinkedList<>();
LinkedList<String> stack_res=new LinkedList<>();
public String computeString(String s) {
int multi=0;
for(char c:s.toCharArray()){
if(c=='['){
stack_multi.addLast(multi);
stack_res.addLast(res.toString());
multi=0;
res=new StringBuilder();
}else if(c==']'){
StringBuilder sb=new StringBuilder();
int cur_multi=stack_multi.removeLast();
for(int i=0;i<cur_multi;i++) sb.append(res);
res = new StringBuilder(stack_res.removeLast()+sb);
}else if(c>='0'&&c<='9') multi=multi*10+c-'0';
else if(c=='*') continue;
else res.append(c);
}
return res.toString();
}
}
四、
/*
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] s = sc.nextLine().split(" ");
int[] arr = new int[s.length];
for(int i=0; i<s.length; i++){
arr[i] = Integer.parseInt(s[i]);
}
String res = binarySearchTree(arr,0,arr.length-1);
System.out.println(res.substring(0,res.length()-1));
}
public static String binarySearchTree(int[] arr, int start, int end){
if(start == end){
return String.valueOf(arr[start] + " ");
}
int index = start;
boolean flag = false;
for(int i = start; i <= end; i++){
if(arr[i] > arr[start]) {
flag = true;
index = i;
break;
}
}
if(flag){
return binarySearchTree(arr, start+1,index-1) + binarySearchTree(arr, index, end);
} else {
return binarySearchTree(arr, start+1,end);
}
}
}
*/
二叉查找树的中序遍历是递增数组,将输入的前序序列进行排序可得到中序遍历数组,根据前序和中序遍历序列可还原二叉树,则可找到所有的叶子节点。
模拟前序遍历,找到左右子树的范围,若子树只有一个节点,加入到结果集。
import java.util.*;
public class Main {
private static List<Integer> res;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
sc.close();
String[] ss = s.split(" ");
int n = ss.length;
int[] nums = new int[n];
res = new ArrayList<>();
for (int i = 0; i < n; i++) {
nums[i] = Integer.parseInt(ss[i]);
}
dfs(nums, 0, n - 1);
for (int r: res) {
System.out.print(r + " ");
}
}
private static void dfs(int[] nums, int left, int right) {
if (left == right) {
res.add(nums[left]);
return;
} else if (left > right) {
return;
}
int root = nums[left];
//找到右子树的起点
int rightStart = left + 1;
for (int i = left + 1; i <= right; i++) {
if (nums[i] > root) {
rightStart = i;
break;
}
}
if (nums[rightStart] > root) {
dfs(nums, left + 1, rightStart - 1);
dfs(nums, rightStart, right);
} else {
dfs(nums, left + 1, right);
}
}
}
五、
class Solution {
public boolean checkValidString(String s) {
int l = 0, r = 0;
for (char c : s.toCharArray()) {
if (c == '(') {
l++; r++;
} else if (c == ')') {
l--; r--;
} else {
l--; r++;
}
l = Math.max(l, 0);
if (l > r) return false;
}
return l == 0;
}
}
六、
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
public ListNode reverseLinkedList (ListNode head, int k) {
ListNode dum=new ListNode(0);
dum.next=head;
ListNode pre=dum,end=dum;
while(end.next!=null){
for(int i=0;i<k && end.next!=null;i++) end=end.next;
//if(end==null) break;
ListNode second=end.next;
end.next=null;
ListNode start=pre.next;
pre.next=reverseList(start);
start.next=second;
pre=start;
end=start;
}
return dum.next;
}
private ListNode reverseList(ListNode head){
ListNode pre=null,cur=head;
while(cur!=null){
ListNode tmp=cur.next;
cur.next=pre;
pre=cur;
cur=tmp;
}
return pre;
}
}