This commit is contained in:
fanxb 2021-03-26 17:52:16 +08:00
parent 19d2a9bca1
commit 90dd4ad4ea
2 changed files with 126 additions and 0 deletions

View File

@ -0,0 +1,63 @@
package com.fanxb.interview;
/**
* 具有给定数值的最小字符串
* <p>
* 题目地址https://leetcode-cn.com/problems/smallest-string-with-a-given-numeric-value/
* <p>
* 解题思路
* 1. 贪心算法字典序最小意思就是要把尽量把小的字母放前面也可以说是把尽量大的数字放后面因此有两种做法
* a. 每次放尽量小的字母在前面然后判断后面的全放最大的字母能否满足大于等于k-已存在的数字和.如果能满足再放第二个,如果不满足就把当前的字母加大1,再判断直到满足要求
*
* @author fanxb
* Date: 2020/6/9 15:10
*/
public class Q1663 {
public String translateNum1(int n, int k) {
char[] res = new char[n];
//放入的数字和
int num1 = 0;
for (int i = 0; i < n; i++) {
short temp = 1;
while ((n - i - 1) * 26 + num1 + temp < k) {
//当前位置放temp后即使后面全部为26也无法满足,所以当前位置需要+1
temp++;
}
num1 += temp;
res[i] = (char) ('a' + temp - 1);
}
return new String(res);
}
/**
* 更优的方法没有子循环
*
* @return java.lang.String
* @author fanxb
* @date 2021/3/26
**/
public String translateNum(int n, int k) {
char[] res = new char[n];
//放入的数字和
int num1 = 0;
int temp;
for (int i = 0; i < n; i++) {
if ((temp = (26 * (n - i - 1) - (k - num1))) >= 0) {
//说明剩下的位置全放26至少能够满足需求
res[i] = 'a';
num1 += 1;
} else {
//说明剩下位置全放26仍然缺-temp所以第i个位置为-temp
res[i] = (char) ('a' - temp - 1);
num1 -= temp;
}
}
return new String(res);
}
public static void main(String[] args) {
System.out.println(new Q1663().translateNum(23100, 567226));
System.out.println(new Q1663().translateNum1(23100, 567226));
}
}

View File

@ -0,0 +1,63 @@
package com.fanxb.interview;
/**
* TODO 类描述
*
* @author fanxb
* @date 2021/3/26
**/
public class Q83 {
public static class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
public ListNode deleteDuplicates(ListNode head) {
ListNode temp = head;
while (temp != null && temp.next != null) {
if (temp.next.val == temp.val) {
temp.next = temp.next.next;
} else {
temp = temp.next;
}
}
return head;
}
/**
* 递归版块
*
* @param head head
* @return com.fanxb.interview.Q83.ListNode
* @author fanxb
* @date 2021/3/26
**/
public ListNode deleteDuplicatesRecursion(ListNode head) {
if (head == null || head.next == null) {
return null;
}
head.next = deleteDuplicatesRecursion(head.next);
if (head.next.val == head.val) {
return head.next.next;
}
return head;
}
public static void main(String[] args) {
}
}